1183. 排序数组中的单个元素
描述
给定一个排序数组,只包含整数,其中每个元素出现两次,除了一个出现一次的元素。 找到只出现一次的单个元素。
例1:
输入:[1,1,2,3,3,4,4,8,8]
输出:2
例2:
输入:[3,3,7,7,10,11,11]
输出:10
您的解决方案应在O(log n)时间和O(1)空间中运行。
class Solution {
public:
/**
* @param nums: a list of integers
* @return: return a integer
*/
int singleNonDuplicate(vector<int> &nums) {
// write your code here
return findn(0, nums.size()-1, nums);
}
int findn(int l, int r, vector<int> &nums) {
if (l==r) return nums[l];
int mid = (l+r) / 2;
if (mid%2 == 0) {
if (nums[mid]==nums[mid-1]) findn(l, mid-2, nums);
else if (nums[mid]==nums[mid+1]) findn(mid+2, r, nums);
else return mid;
}
else if (mid%2 == 1) {
if (nums[mid]==nums[mid-1]) findn(mid+1, r, nums);
else if (nums[mid]==nums[mid+1]) findn(l, mid-1, nums);
else return mid;
}
}
};