Leetcode 540. 有序数组中的单一元素

要求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 };

 

posted on 2024-11-10 11:54  greenofyu  阅读(2)  评论(0编辑  收藏  举报