LeetCode: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.
一开始做题的时候,没考虑到不rotated,就是一个升序数组的情况。这样一开始写的代码不能AC。
其实和普通的二分法差不多。只是多了几个判断步骤。
有left,right,mid 3个指针。
当A[left]<A[mid]的时候。说明left->mid这个是升序,这样拿target的比较。
如果target>mid,所以target只能在mid的右边。如果target<A[mid],这样就有两种情况,由于可能存在小值在数组的最右边。所以target可能位于mid的左边可能位于mid右边。将target与A[left]相比,小于A[left]时,是存在于mid的右边。大于[left]介于left和mid之间。
其实情况同理。
public class Solution {
public int search(int[] A, int target) {
if(A == null || A.length == 0) return -1;
int index = -1;
int left = 0;
int right = A.length - 1;
int mid = (left + right)/2 ;
while(left<=right)
{
if(A[mid] == target)
{
index = mid;
return index;
}
if(A[left]<=A[mid])
{
if(target>A[mid])
{
left = mid + 1;
}
else
{
if(target<A[left])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
}
else
{
if(target < A[mid])
{
right = mid - 1;
}
else
{
if(target<A[left])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
}
mid = (left + right)/2;
}
return index;
}
}