问题描述:
Given a sorted array consisting of only integers where every element appears twice except for one element which appears once. Find this single element that appears only once.
示例:
Input: [1,1,2,3,3,4,4,8,8] Output: 2
Input: [3,3,7,7,10,11,11] Output: 10
问题分析:
查找类问题可考虑用二分查找法。
过程详见代码:
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int left = 0;
int right = nums.size() - 1;
int n;
int mid;
while (left < right)
{
mid = (left + right) / 2;
n = (right - left) / 2 % 2;
if (nums[mid] < nums[mid + 1] && nums[mid] > nums[mid - 1]) return nums[mid];
else if (nums[mid] == nums[mid - 1])
{
if(n)
{
left = mid + 1;
}
else right = mid - 2;
}
else if (nums[mid] == nums[mid + 1])
{
if(n)
{
right = mid - 1;
}
else left = mid + 2;
}
}
return nums[left];
}
};