Search in Rotated Sorted Array

来源:互联网 发布:焊缝截面计算软件 编辑:程序博客网 时间:2024/06/05 19:25

Search in Rotated Sorted Array

 

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.

1.   0 1 2 4 5 6 7

2.   7 0 1 2 4 5 6

3.   6 7 0 1 2 4 5

4.   5 6 7 0 1 2 4

5.   4 5 6 7 0 1 2

6.   2 4 5 6 7 0 1

7.   1 2 4 5 6 7 0

We can use binary search method to solve this problem. Firstly, let's try to find the regular pattern from the rotated array list above. From list 2,3,4, we can see that the value of the middle element is less that the value of the first element and the right half of every list is in an ascending order. From list 1,5,6,7, we can see that the value of the middle element is larger than the value of the first element and the left half of the list is in an ascending order.

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

 

0 0
原创粉丝点击