Leetcode 540 有序数组中的单一元素
问题重述
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
示例 1:
输入: [1,1,2,3,3,4,4,8,8]
输出: 2
示例 2:
输入: [3,3,7,7,10,11,11]
输出: 10
思路
注意思考,在出现独立数前后,每个相同的数,他的及奇偶位发生了什么变化。
比如 [1, 1, 2, 2, 3, 4, 4, 5, 5],第一个1是偶数,但是第一个4就是奇数位了。所以可以一次加二,根据奇偶位变化二分来得独立数
最终代码
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int start = 0, end = nums.size() - 1;
while (start < end) {
int mid = start + (end - start) / 2;
if (mid % 2 == 1) {
--mid;
}
if (nums[mid] == nums[mid + 1]) {
start = mid + 2;
} else {
end = mid;
}
}
return nums[start];
}
};