| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 二分、三分、01分数规划1 -> 正文阅读 |
|
[数据结构与算法]二分、三分、01分数规划1 |
认准一种算法,开始解释。解释详见代码,推荐在写代码时找例子试试,不用死记硬背。 为了防止l+r越界 ,可以写成这种形式:mid=l+(r-l)/2;
binary_search 返回bool,判断是否存在 lower_bound 返回可插入最小位置的迭代器(如lower_bound(a,a+3,4),其中a为{1,3,3},则返回可以插入3的迭代器位置:1之后)即查找第一个大于或等于num的数字。 upper_bound?返回可插入最大位置的迭代器(如lower_bound(a,a+3,4),其中a为{1,3,3},则返回可以插入3的迭代器位置:最后一个3之后)即第一个大于num的数字。 另外,可在从大到小的排序数组中,重载lower_bound()和upper_bound(): lower_bound( begin,end,num,greater<type>() ):查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end。 upper_bound( begin,end,num,greater<type>() ):从数组的begin位置到end-1位置二分查找第一个小于num的数字,找到返回该数字的地址,不存在则返回end。 所以上述问题直接用lower_bound-upper_bound就可以得出结果QAQ
既然有了函数,啥时候用手写的呢?答案为:二分答案+检验
利用了二分的思想:通过结果反馈调整答案。在此题中,需要先对枚举出的答案进行试验,如果成功就再试一个更大的答案。
和上一道题类似,二分答案。关键在于如何判断x分钟能否晾干所有衣服。若x分钟可以自然风干,则不管它;若不能,则计算所需吹风机的时间,再与答案进行对比看吹风机时间够不够。 细节问题: 1、实际上当判断需要的吹风机时间时,需要减掉自然风干的时间!另外,还需要转换成double再用ceil上取整。 2、遇到sum这种求和的,应习惯性地检查是否会爆!
总结 若出现解决最大或最小值问题,依次考虑:二分、贪心和动态规划。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 13:37:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |