我是跟着代码随想录刷的题,所以首先是做的二分的题,二分查找的题比较简单,思路比较清晰:
左右指针,对比中间数值,对左右指针进行更改,对比之前写过的,多了一个防止溢出的操作,在算中间值时,使用 mid = left + (right-left)/2;
题目分别为:
leecode 704,35,34,69,367
以 leecode34为例:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left = 0;
int right = nums.size()-1;
int mid;
vector<int> res;
while(left<=right) {
mid=left + (right-left)/2;
if(nums[mid] == target) {
left = mid;
right = mid;
while(left>=0&&nums[left]==target){
left--;
}
while(right<=(nums.size()-1)&&nums[right]==target){
right++;
}
return vector<int>{left+1,right-1};
}
else if(nums[mid] > target)
right = mid - 1;
else
left = mid + 1;
}
return vector<int>{-1,-1};
}
};