540 single element in a sorted array

https://leetcode.com/problems/single-element-in-a-sorted-array/

class Solution {
    public int singleNonDuplicate(int[] nums) {
        if (nums.length == 1) {
            return nums[0];
        }
        int n = nums.length;
        if (nums[0] != nums[1]) {
            return nums[0];
        }
        if (nums[n - 1] != nums[n - 2]) {
            return nums[n - 1];
        }
        int left = 1;
        int right = n - 2;
        while (left + 1 < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] != nums[mid + 1] && nums[mid] != nums[mid - 1]) {
                return nums[mid];
            }
            else if (nums[mid] == nums[mid + 1]) {
                if (mid % 2 == 0) {
                    left = mid;
                } else {
                    right = mid;
                }
            } else {
                if (mid % 2 == 0) {
                    right = mid;
                } else {
                    left = mid;
                }
            }
        }
        if (nums[left] != nums[left + 1] && nums[left] != nums[left - 1]) {
            return nums[left];
        }
        return nums[right];
    }
}

难点主要在于看出来这是一道binary search,提示点应该是sorted吧

Last updated