题目描述
解题方法
这个 题实际上只检查偶数索引即可,这样,如果偶数索引的后一个和它相同,则必然在其后,否则,就在包括当前元素的以前区间,这种情况下答案不会是该索引后边的那个元素,因为该位置是偶数索引,会导致前边仍然存在奇数个数,与题意只存在一个矛盾。
代码
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int n = nums.size();
int l = 0, r = n - 1;
while (l < r) {
int mid = l + r >> 1;
if (mid % 2 == 1)mid--;
if (nums[mid] == nums[mid + 1]) {
l = mid + 2;
}
else {
r = mid;
}
}
return nums[l];
}
};