Search in Rotated Sorted Array代码如下:
class Solution {
public:
int minusTwoSearch(vector<int> &nums, int start, int end, int target) {
if(nums[start] == target)
return start;
if(nums[end] == target)
return end;
while(end - start > 1) {
int mid = (start + end) / 2;
if(nums[mid] == target)
return mid;
if(nums[mid] > target) {
end = mid;
}else {
start = mid;
}
}
return -1;
}
int search(vector<int>& nums, int target) {
int length = nums.size();
int cPoint = 1;
int index;
while(cPoint < length) {
if(nums[cPoint - 1] > nums[cPoint])
break;
cPoint++;
}
if(cPoint == length) {
index = minusTwoSearch(nums, 0, length - 1, target);
}else {
index = minusTwoSearch(nums, 0, cPoint - 1, target);
if(index == -1)
index = minusTwoSearch(nums, cPoint, length - 1, target);
}
return index;
}
};
Search in Rotated Sorted Array II 代码如下:
class Solution {
public:
int minusTwoSearch(vector<int> &nums, int start, int end, int target) {
if(nums[start] == target)
return start;
if(nums[end] == target)
return end;
while(end - start > 1) {
int mid = (start + end) / 2;
if(nums[mid] == target)
return mid;
if(nums[mid] > target) {
end = mid;
}else {
start = mid;
}
}
return -1;
}
bool search(vector<int>& nums, int target) {
int length = nums.size();
int cPoint = 1;
int index;
while(cPoint < length) {
if(nums[cPoint - 1] > nums[cPoint])
break;
cPoint++;
}
if(cPoint == length) {
index = minusTwoSearch(nums, 0, length - 1, target);
}else {
index = minusTwoSearch(nums, 0, cPoint - 1, target);
if(index == -1)
index = minusTwoSearch(nums, cPoint, length - 1, target);
}
return index == -1 ? false : true;
}
};