您的位置:首页 > 其它

Search in Rotated Sorted Array

2015-06-13 05:00 501 查看


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;
}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: