leetcode 面试题 10.03. 搜索旋转数组 medium
题目描述:
解题思路:
首先多次旋转,最后还是两段递增的序列,也就是跟leetcode 81一样的。
因为要求返回索引值最小的,所以需要删除结尾重复的(让最后找到的下标是在前面)
代码:
//
class Solution {
public:
int search(vector<int>& arr, int target) {
if (arr.empty())
return -1;
int l = 0, r = arr.size()-1;
while (r > l && arr[r]==arr[l])
r--;
if (arr[l] > arr[r]){
while (l < r){
int mid = l+ (r-l)/2;
if (arr[mid] < arr[0])
r = mid;
else
l = mid + 1;
}
if (target >= arr[0]){
l = 0;
r--;
} else {
r = arr.size()-1;
}
}
while (l < r){
int mid = l+(r-l)/2;
if (arr[mid] >= target)
r = mid;
else
l = mid+1;
}
return arr[l] == target?l:-1;
}
};