题解
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int size_ = nums.size();
int lo = 0, hi = size_;
if (size_ == 1)
return nums[0];
while (lo < hi) {
int mi = (lo + hi) >> 1;
if(mi != size_ -1 && nums[mi] == nums[mi + 1]) {
if(mi % 2 == 0) {
lo = mi;
}else hi = mi;
}else if(mi != 0 && nums[mi] == nums[mi - 1]) {
if(mi %2 != 0) {
lo = mi + 1;
}else hi = mi - 1;
}else return nums[mi];
}
return nums[lo];
}
};
总结
二分查找,
都用前闭后开区间,看好下一个查找的区间,精确分情况讨论,注意处理下越界条件。