33. Search in Rotated Sorted Array
Difficulty: Medium
Topics: Array, Binary Search
Similar Questions:
Problem:
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.
Your algorithm's runtime complexity must be in the order of O(log n).
Example 1:
Input: nums = [4,5,6,7,0,1,2]
, target = 0
Output: 4
Example 2:
Input: nums = [4,5,6,7,0,1,2]
, target = 3
Output: -1
Solutions:
class Solution {
public:
/**
* @param A: an integer rotated sorted array
* @param target: an integer to be searched
* @return: an integer
*/
int search(vector<int> &A, int target) {
// write your code here
if (A.size() == 0) return -1;
int left = 0;
int right = A.size() - 1;
while (left + 1 < right) {
int mid = left + ((right - left) >> 1);
if (A[mid] == target) return mid;
if (A[left] < A[right]) {
if (A[mid] < target) {
left = mid;
} else {
right = mid;
}
} else {
if (A[mid] > A[left]) {
if (A[mid] > target && A[left] <= target) {
right = mid;
} else {
left = mid;
}
} else {
if (A[mid] < target && A[right] >= target) {
left = mid;
} else {
right = mid;
}
}
}
}
if (A[left] == target) return left;
if (A[right] == target) return right;
return -1;
}
};