当前位置: 首页> 娱乐> 影视 > 【中等】保研/考研408机试-二分查找(模板题)

【中等】保研/考研408机试-二分查找(模板题)

时间:2025/7/13 5:45:20来源:https://blog.csdn.net/m0_62237233/article/details/139669716 浏览次数:1次

二分查找就是在一个有序数组中查找某个值,以首端尾端的中点mid查找对比,mid与要查找的数进行对比,看落在哪个区间,在那个区间重新得到首端和尾端,进而得到新的mid值。

一、模板题

二分查找-I_牛客题霸_牛客网

class Solution {
public:int search(vector<int>& nums, int target) {int left=0,right=nums.size();if(nums.empty()){return -1;}while(left<=right){int mid=(left+right)/2;if(nums[mid]==target){return mid;}else if (nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}}return -1;}
};

作重注意right的迭代是mid-1; left的迭代是mid+1;  可以理解为:左加右减

二、进阶模板题

如果二分查找是希望返回查找到第一个出现的数,比如[1,2,2,3,4]要查找2,返回的下标应该是1(第二个数),但如果是二分的话就会返回2,这样不满足要求了。

所以需要对if(num[mid]==target)这种情况做一个判断,当出现这个数的适合,前面是不是有相同的?返回相同序列的第一个数即可。

二分查找-II_牛客题霸_牛客网

class Solution {
public:int search(vector<int>& nums, int target) {if(nums.empty()){return -1;}int left=0,right=nums.size()-1;while (left<=right) {int mid=(left+right)/2;if(nums[mid]==target){if(nums[mid]==nums[mid-1]){while(nums[mid]==nums[mid-1]){mid--;}return mid;}else{return mid;}}else if(nums[mid]<target){left=mid+1;}else if(nums[mid]>target){right=mid-1;}}return -1;// write code here}
};

关键字:【中等】保研/考研408机试-二分查找(模板题)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: