81. Search in Rotated Sorted Array II

题目分析

原题链接,登陆 LeetCode 后可用
这道题目跟 Search in Rotated Array 的区别就在于,如果 left 位置上的值和 mid 位置上的值相等的话,并不一定能保证在 left 到 mid 区间上数值是递增的,比如 [1 2 3 1 1 1 1 1],所以当 left 位置上的值和 right 位置上的值相等的时候,我们要将 left 的值向后移动一位。所以会如果有重复元素会影响到时间复杂度,时间复杂度为O(n),比如 [1,1,1,1,1,1,1,1,2], target = 2 的情况。

代码

class Solution {
    public boolean search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int mid = 0;
        while(left <= right) {
            mid = left + (right - left) / 2;
            if(target == nums[mid]) {
                return true;
            }
            // 能保证 left 到 right 这段区间一定是递增的
            if(nums[left] < nums[mid]) {
                if(target >= nums[left] && target < nums[mid]) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            } else if(nums[left] > ums[mid]) {
                // 能保证 mid 到 right 一定是递增的
                if(target > nums[mid] && target <= nums[right]) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            } else {
                left++;
            }
        }
        return false;
    }
}

你可能感兴趣的:(81. Search in Rotated Sorted Array II)