题目来源:
33. 搜索旋转排序数组 - 力扣(LeetCode)
代码实现:
class Solution {
public:
int search(vector<int>& nums, int target) {
//闭区间写法
int n=nums.size();
int left=0,right=n-1;
while(left<=right){
int mid=(left+right)>>1;
if(target==nums[mid]) return mid;
if(nums[left]<=nums[mid]){//从left到mid有序
if(target>=nums[left]&&target<nums[mid]){
//target 在这段区间上
right = mid-1;//慢慢缩小区间
}
else left=mid+1;//不在这段区间上
}
else{ //从left到mid无序
if(target>nums[mid]&&target<=nums[right]){
left=mid+1;
}
else right=mid-1;
}
}
return -1;
}
};
题目心得:
- 有些做法效率很高,很精妙,但是不具备可学习性,一定要找自己能看得懂的,下次可以自己写出来的