有序数组中的单身数字
问题
这个题目说的是,给你一个排好序的整数数组,里面的数字都出现两次,只有一个数字出现了一次,我们管它叫单身数字,你要写代码找到这个单身数字。
比如说给你的有序数组是:
1, 1, 2, 2, 4, 4, 6, 8, 8
这个数组里 6 只出现了一次,因此你要返回的数字就是 6。
代码
public class AlgoCasts {
// Time: O(n), Space: O(1)
public int singleNumInSortedArrayWithXOR(int[] nums) {
int result = 0;
for (int num: nums) result ^= num;
return result;
}
// Time: O(log(n)), Space: O(1)
public int singleNumInSortedArrayBinarySearch(int[] nums) {
int low = 0, high = nums.length - 1;
while (low <= high) {
int mid = low + (high - low)/2;
if (mid-1 >= 0 && nums[mid-1] == nums[mid]) {
--mid;
} else if (mid+1 < nums.length && nums[mid+1] == nums[mid]) {
} else {
return nums[mid];
}
if ((mid-low) % 2 == 1) high = mid - 1;
else low = mid + 2;
}
return -1;
}
}