我在做密码540。排序数组问题中的单个元素。
我在网上找到了答案。
这个答案可以在leetcode网站上成功提交。但是当我在编译器上运行这个程序时,它会输出一个8
的答案。我应该得到的答案是2
而不是8
。
我不太明白为什么这个程序的最后一部分是if (left == 0) return nums[0]
。
谁能告诉我原因吗?
public class Main {
public static void main(String[] args) {
int[] n = {1,2,3,3,4,4,8,8};
int ans = singleNonDuplicate(n);
System.out.println(ans);
}
private static int singleNonDuplicate(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left + 1 < right) {
int mid = (left + right) / 2;
int num = nums[mid];
if (num != nums[mid - 1] && num != nums[mid + 1]) return num;
if (mid % 2 == 0) {
if (num == nums[mid - 1]) {
right = mid;
} else {
left = mid;
}
} else {
if (num == nums[mid - 1]) {
left = mid;
} else {
right = mid;
}
}
}
if (left == 0) return nums[0];
return nums[nums.length - 1];
}
}
发布于 2022-07-16 16:44:24
首先,如果不真正了解解决方案的作用,我就不会在网上搜索问题的解决方案。
但是,您遇到的问题是由于输入数组中有两个不重复的数字造成的。这两个从不重复的数字是'1‘和'2’。如果您查看您的程序,您会注意到,最后一个return语句返回数组的最后一个元素,在您的例子中,这个元素是数字'8‘。这就是为什么你要得到你不想要的返回值。
使用这个数组将允许您的'singleNonDuplicate(int[])‘方法返回数字'2’。
int[] n = {1,1,2,3,3,4,4,8,8};
https://stackoverflow.com/questions/73008318
复制