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.
解决方案:用二分法查找。先介绍下普通的二分法
int search(vector<int>& nums, int target) {
int first = 0, last = nums.size() - 1;
int mid = 0;
while (first <= last) {
mid = (first + last) / 2;
if (target == nums[mid])
return mid;
else if (target > nums[mid])
first = mid + 1;
else
last = mid - 1;
}
return -1;
}
//解决方案,时间复杂度O(logn),空间复杂度O(1)
int search(vector<int>& nums, int target) <pre name="code" class="cpp">{
int first = 0, last = nums.size() - 1;
int mid = 0;
while (first <= last) {
mid = (first + last) / 2;
if (target == nums[mid])
return mid;
//说明mid前半部分是有顺序的,则按正常的2分查找来计算
<span style="white-space:pre"> </span> //如果<span style="font-family: Arial, Helvetica, sans-serif;">target < nums[mid] && target >= nums[first],则target肯定在前半部分。否则,去后半部分查找</span>
if (nums[first] <= nums[mid]) {
if (target < nums[mid] && target >= nums[first])
last = mid - 1;
else
first = mid + 1;
}
//说明mid后半部分是有顺序的
else {
if (target > nums[mid] && target <= nums[last])
first = mid + 1;
else
last = mid - 1;
}
}
return -1;
}