美文网首页
540. Single Element in a Sorted

540. Single Element in a Sorted

作者: 尚无花名 | 来源:发表于2019-03-16 21:36 被阅读0次

Given a sorted array consisting of only integers where every element appears twice except for one element which appears once. Find this single element that appears only once.

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

这题是用binary search做。
这题比较难的地方是在于怎么处理细节
你取的那个mid = l + (r - l) / 2 可能是奇数也可能是偶数
是奇数怎么办,是偶数怎么办?
下面是是一个别外学来的很巧妙的处理方式

    public int singleNonDuplicate(int[] nums) {
        int l = 0, r = nums.length - 1;
        while (l < r) {
            int m = l + (r - l) / 2;
            if (m % 2 == 1) m--; //先看是不是偶数,不是的话m--变成偶数 
            if (nums[m + 1] == nums[m]) l = m + 2; //和它下一个比 不用担心出界的问题
            else r = m;
        }
        return nums[l];
    }

相关文章

网友评论

      本文标题:540. Single Element in a Sorted

      本文链接:https://www.haomeiwen.com/subject/qvdemqtx.html