- 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
- O(log n)时间复杂度和 O(1)空间复杂度
若时间复杂度为O(logn),则不能遍历整个数组,otherwise为O(n)- 若用位运算-异或,时间复杂度为O(n)
- 数组中元素总个数为奇数个
- single element 元素肯定位于偶数index处
public int singleNonDuplicate(int[] nums) {
int left = 0, right = nums.length - 1;
//当搜索区间只剩一个元素时,此单一元素即为single element
while(left < right) {
int mid = left + (right - left) / 2;
//使得mid为偶数
if(mid % 2 == 1) mid --;
//single element 位于mid右侧+2位置以后
if(nums[mid] == nums[mid + 1]) {
left = mid + 2;
}
//single element 位于mid处,或者mid左侧
else {
right = mid;
}
}
return nums[left];
}