Search in Rotated Sorted Array
Description
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,0 1 2 4 5 6 7
might become4 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.
Example
For[4, 5, 1, 2, 3]
andtarget=1
, return2
.
For[4, 5, 1, 2, 3]
andtarget=0
, return-1
.
Challenge
O(logN) time
Related problems
Search in Rotated Sorted Array II
Search a 2D Matrix
Implementation
Link: http://lintcode.com/en/problem/search-in-rotated-sorted-array/
class Solution {
/**
* param A : an integer ratated sorted array
* param target : an integer to be searched
* return : an integer
*/
public:
int search(vector<int> &A, int target) {
// write your code here
if(A.size() == 0) return -1;
int start = 0, end = A.size() - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(A[mid] == target) {
return mid;
} else if(A[mid] < A[end]) {
if(A[mid] < target && target <= A[end]) {
start = mid;
} else {
end = mid;
}
} else {
if(A[mid] > target && target >= A[start]) {
end = mid;
} else {
start = mid;
}
}
}
if(A[start] == target) return start;
if(A[end] <= target) return end;
return -1;
}
};