要求O(logn)的复杂度基本就是二分。
分析序列1,1,2,2,3,4,4,5,5
(0,1),(2,3),(5,6),(7,8)各自成对。
0,1 10,11 101,110 111,1000
可以观察出目标的左边可用^异或找出成对的,右边则不行,所以可以据此来二分。
1 class Solution { 2 public: 3 int singleNonDuplicate(vector<int>& nums) { 4 int n=nums.size(); 5 int l=0,r=n-1; 6 while(l<r){ 7 int mid=l+r>>1; 8 if(nums[mid]==nums[mid^1]){ 9 l=mid+1; 10 }else{ 11 r=mid; 12 } 13 } 14 return nums[l]; 15 } 16 };