You are given a sorted array consisting of only integers where every element appears exactly twice, except for one element which appears exactly once. Find this single element that appears only once.
Note: Your solution should run in O(log n) time and O(1) space.
給你一個整理過的陣列,其元素只包含出現兩次的整數和只有一個只出現一次的整數。找到那個單獨只出現一次的元素。
注意:
你的答案應該在O(log n)的時間複雜度和O(1)的空間複雜度之中。
Example 1:
Input: [1,1,2,3,3,4,4,8,8]
Output: 2
Example 2:
Input: [3,3,7,7,10,11,11]
Output: 10
終止條件起始等於終點
即可。
class Solution {
public:
int find(vector<int>& nums, int s, int e)
{
if(s == e)
return nums[s];
int mid = (s + e) / 2;
if(nums[mid] != nums[mid - 1] && nums[mid] != nums[mid + 1])
return nums[mid];
int n = (e - s) / 2;
if(n % 2 == 0)
{
if(nums[mid] == nums[mid - 1])
{
return find(nums, s, mid);
}
else
{
return find(nums, mid, e);
}
}
else
{
if(nums[mid] == nums[mid - 1])
{
return find(nums, mid + 1, e);
}
else
{
return find(nums, s, mid - 1);
}
}
}
int singleNonDuplicate(vector<int>& nums) {
return find(nums, 0, nums.size() - 1);
}
};
LeetCode
C++