Java 计算递归或迭代调用的中间索引的最佳方法是什么
在实际的Java执行中,第二个是提供优化的函数调用(更好的时间复杂度)。 看起来,对于某个“左”和“右”值,这两个变量都给出了相同的结果。这两个选项有什么不同之处吗。 任何帮助都将不胜感激。(1)是不准确和错误的。(2) 是修复和正确的 问题不在于时间复杂性,而在于准确性 假设Java 计算递归或迭代调用的中间索引的最佳方法是什么,java,algorithm,Java,Algorithm,在实际的Java执行中,第二个是提供优化的函数调用(更好的时间复杂度)。 看起来,对于某个“左”和“右”值,这两个变量都给出了相同的结果。这两个选项有什么不同之处吗。 任何帮助都将不胜感激。(1)是不准确和错误的。(2) 是修复和正确的 问题不在于时间复杂性,而在于准确性 假设right=2147483646和left=2147483646。添加这些将导致 第二个可以避免溢出。这有帮助吗?对于左侧和右侧相对较小的幅值,它们都很好。但较大的数量级会受到整数溢出的影响 1) int mid = (r
right=2147483646
和left=2147483646
。添加这些将导致
第二个可以避免溢出。这有帮助吗?对于左侧和右侧相对较小的幅值,它们都很好。但较大的数量级会受到整数溢出的影响
1) int mid = (right+left)/ 2;
2) int mid = left + (right - left) / 2;
印刷品
int right = Integer.MAX_VALUE-100;
int left = Integer.MAX_VALUE-120;
int newLeft = left + (right-left)/2;
System.out.println(newLeft);
newLeft = (right + left)/2; // = -222/2 = -111
System.out.println(newLeft); // oops!
当我们谈到这个话题时,这就是为什么像这样实现int
比较器是不好的做法:
2147483537
-111
比较器comp=(a,b)->a-b;
什么时候应该是这样
Comparator<Integer> comp = (a, b) -> a - b;
比较器comp=(a,b)->a>b?1:a
读取如果right
和left
之和大于Integer.MAX_值,则第一个值将溢出。更喜欢使用第二个。谢谢你的回复…这就澄清了。谢谢你的回复…这就澄清了区别。
Comparator<Integer> comp = (a, b) -> a > b ? 1 : a < b ? -1 : 0;