欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 【算法篇·更新中】C++秒入门(附练习用题目)

【算法篇·更新中】C++秒入门(附练习用题目)

2025/2/7 3:08:32 来源:https://blog.csdn.net/w2457771/article/details/145371522  浏览:    关键词:【算法篇·更新中】C++秒入门(附练习用题目)

一.二分

1.二分查找

我们来看这样一道题:

有一个保证有序的数组a,它的长度为n。现在我们需要知道这个序列是否含有x。
数据范围:保证n<=1e9

我们看到这道题之后,第一时间想到的就是暴力枚举了,可是我们发现直接枚举会超时。所以我们只能使用一种n logn时间复杂度的算法。
那么能满足n logn时间复杂度的算法,二分查找是首选项。

二分查找怎么找?

二分查找,俗称折半查找法。
折半查找法,顾名思义,每次将查找范围缩小,来达到优化时间的目的。
我们可以设序列a={1,10,25,30,101,234},l为查找的左边界(搜索起点),r为查找的右边界(搜索终点),要查找它是否包含的数是4。
那么搜索起点就是1,终点就是n(a的长度)。
我们一定会用循环,可是,用哪种循环?条件是什么?
很明显,有条件才循环,所以用while循环
由于左边界在往右搜,右边界在往左搜,所以条件是l<r
原理:
左边最大的都小于了这个数,故不可能这个数在左边存在,同样,右边最小的都大于了这个数,故不可能这个数在右边存在。
如果最后搜索完了却依然没有找到,就输出No;
核心代码(模板):

l=1,r=n;
while(l<=r)
{mid=(l+r)/2;if(a[mid]>m[i]){r=mid-1;}else if(a[mid]<m[i]){l=mid+1;}else{cout<<"Yes"<<endl;return 0;}
}
if(l>r)
{cout<<"NO"<<endl;
}

2.二分答案

刚才我们已经学了二分查找,那么二分答案也就没有太难了。
二分答案指的是给定了答案的范围,来二分查找最小的可能中最大的情况或最大的可能中最小的情况。

二分查找&二分答案练习题目【二分答案可作为挑战题】

练习必做题1,难度普及-
练习必做题2,难度普及-
挑战题1
挑战题2

版权声明:

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

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