Leetcode81. Search in Rotated Sorted Array II

这题和Leetcode33. Search in Rotated Sorted Array ,为同一系列,只是多了重复元素。所以思想一致,都是先判断那边是有序的,哪边会包含rotated。然后判断target是否在有序一遍,不在的话去另一边找找看。
多了重复元素,比如34333,无法判断应该往那边找,所以就只能直接暴力遍历。

class Solution {
    public boolean search(int[] nums, int target) {
        if(nums==null||nums.length<1) return false;
        int left = 0,right = nums.length-1;
        int mid = (left+right)/2;
        while(left<=right){
            mid = (left+right)/2;
            if(nums[mid]==target) return true;
            if(nums[mid]>nums[left]){//判断mid左边是否是有序的,是的话,右边会包含rotated元素
                if(target>=nums[left]&&target<nums[mid]){//判断target是否在有序的一边
                    right = mid-1;
                }else{
                    left = mid+1;
                }
            }else if(nums[mid]<nums[right]){//mid右边有序
                if(target>nums[mid]&&target<=nums[right]){
                    left = mid +1;
                }else{
                    right = mid -1;
                }
            }else{//mid和left或right元素相等,这种情况下无法判断哪边有序,就暴力搜索
                return bruteSearch(nums,target,left,right);
            }
        }
        return false;
    }
    private boolean bruteSearch(int[] nums,int target,int left,int right){
        for(int i=left;i<=right;i++){
            if(target==nums[i]) return true;
        }
        return false;
    }
}

Runtime: 0 ms, faster than 100.00% of Java online submissions for Search in Rotated Sorted Array II.
Memory Usage: 39.4 MB, less than 14.73% of Java online submissions for Search in Rotated Sorted Array II.

posted @ 2019-04-10 15:34  大胖子球花  阅读(65)  评论(0)    收藏  举报