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

class Solution {
    public int singleNonDuplicate(int[] nums) {
        // if(nums.length == 1) return nums[0];
        // int count = 1;
        // for(int i = 1; i < nums.length;i++){
        //     if(nums[i] != nums[i-1]) {
        //         count++;
        //         if(count == 2) return nums[i-1];
        //     }else{
        //         count--;
        //     }
        // }
        // return nums[nums.length-1];
        //二分法
        int len = nums.length-1;
        int l = 0,h = len;
        while(l < h){
            int m = (l + h)/2;
            if(m % 2 == 1) m--;
            if(nums[m] == nums[m+1]){
                //前半部分成对出现,在后半部分
                l = m + 2;
            }else{
                //已不成对,在前半部分
                h = m;
            }
        }
        return nums[l];
    }
}

猜你喜欢

转载自www.cnblogs.com/come-on-pxw/p/12783627.html