题目
1.描述
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
2.示例
输入: [1,1,2,3,3,4,4,8,8]
输出: 2
3.思路
当m为偶数时, 如果 nums[m] == nums[m + 1],那么 index 所在的数组位置为 [m + 2, h],此时令 l = m + 2;如果 nums[m] != nums[m + 1],那么 index 所在的数组位置为 [l, m],此时令 h = m。
4.代码
public int singleNonDuplicate(int[] nums) {
int low = 0, high = nums.length - 1;
while (low < high) {
int mid = low + (high - low) / 2;
if (mid % 2 == 1) {
mid--;
}
if (nums[mid] == nums[mid + 1]) {
low = mid + 2;
} else {
high = mid;
}
}
return nums[low];
}
参考:链接
本文介绍了一种高效查找有序数组中唯一出现一次数字的方法。通过巧妙利用数组的有序性和奇偶特性,实现了O(log n)的时间复杂度。文章提供了详细的解题思路及Java代码实现。

被折叠的 条评论
为什么被折叠?



