33. Search in Rotated Sorted Array

来源:互联网 发布:营口港大数据平台 编辑:程序博客网 时间:2024/06/14 22:35

Suppose an array sorted in ascending order 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.

二分查找旋转有序数组元素。

假设旋转为升序的,假设数组为的[3, 4, 5, 6, 7, 0, 1, 2],在数组mid值得左边或者右边,一定存在一个有序的子数组,如本例中mid对应的数组值为6, 在6的左边就是一个升序的子数组,如数组为[7, 0, 1, 2, 3, 4, 5, 6],则mid值为2,在2的右边为一个升序的子数组,根据这种关系,可以缩小搜索关系。

程序如下所示:

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