33. Search in Rotated Sorted Array

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e.,0 1 2 4 5 6 7might become4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

思路1:左右分开考虑,总有一边是sort的

    public int search(int[] nums, int target) {
        int lo = 0;
        int hi = nums.length-1;
        while(lo<=hi){
            int mid = (lo+hi)/2;
            if (nums[mid]==target){
                return mid;  
            } 

            if (nums[mid]<nums[hi]){ //right half sorted
                if (target>nums[mid]&&target<=nums[hi]){
                    lo = mid+1;
                }else{
                    hi = mid-1;
                }
            }else{ //left half sorted
                if (target<nums[mid]&&target>=nums[lo]){
                    hi = mid-1;
                }else{
                    lo = mid+1;
                }
            }
        }

        return -1;
    }
}

results matching ""

    No results matching ""