Search in Rotated Sorted Array

来源:互联网 发布:淘宝处罚规则 编辑:程序博客网 时间:2024/06/05 18:00

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 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.

分析:

显然用二分查找法喽

但是,当mid处于前半部分还是后半部分时对left和right的处理时不同,所以要分开处理

当mid处于前半部分时,如果left元素小于target,target也小于right元素,说明target在left和mid之间,则right = mid - 1;否则,left = mid + 1;

当mid处于后半部分时,如果right元素大于target,target也大于mid元素,说明target在mid和right之间,则left = mid + 1,否则,right = mid - 1

参考代码:

http://www.programcreek.com/2014/06/leetcode-search-in-rotated-sorted-array-java/

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



0 0