本文最后更新于636 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
题目链接:https://leetcode.cn/problems/binary-search/
文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
视频讲解:https://www.bilibili.com/video/BV1fA4y1o715
1.第一下看到这个题目的想法是当时学数据结构的时候恶补过这个,也是正巧是蓝桥杯的时候,题目倒是没想多少就回忆来着,对于这个题其实我的第一个想法就是Binary Search,为什么说这个呢就是当时学习的时候看一个课,总能听到说Binary Search当时还不知道是啥意思呢,后来就总在脑子里嘟囔,所以这个二分我印象还是听深刻的。
2.所以看了一下代码随想录,看了一下思路,就在这个上面没停留太长时间,但是我注意到这个左闭右开,左闭右闭的问题我是我之前没有考虑到的,所以这次着重研究这个问题,以及对于数据越界以及防止溢出上也注重注意,小小数组也是给我不小的收获。
3.困难不是很多,都是细小的问题。
4.对我来说更多的是大家一起学习算法和在群里讨论的氛围,还比较吸引我,其次就是我终于将博客开始写我的第一篇文章。希望可以一直坚持下去。
左闭右闭 :CPP
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() -1;//数组越界
while(left<=right){
int mid = (left + right)/2;
//int mid = left + (right - left);//防止溢出
if(nums[mid] < target){
left = mid + 1;
}else if(nums[mid] > target){
right = mid -1;
}else{
return mid;
}
}
return -1;
}
};
左闭右开 :CPP
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size();//发生变化,注意区间变化
while(left < right){
int mid = left + (right - left)/2;
if(nums[mid] < target){
left = mid + 1;//这里也是区间变化
}else if(nums[mid] > target){
right = mid;
}else{
return mid;
}
}
return -1;
}
};