题目链接

这题我开始一直在想如何在数组上dp操作搜索区间, 很蠢, 实际上用二分查找的方法可以很快的解决

首先我们通过一个函数判断第x天是否符合题意, 如果x天可以做出m束花, 那么大于m的天数必然可以.

从这里便可以看出其符合二分搜索的特性 :

  1. 答案在一个固定区间内;
  2. 可能查找一个符合条件的值不是很容易,但是要求能比较容易地判断某个值是否是符合条件的;
  3. 可行解对于区间满足一定的单调性。

由于题目设定的最大值是1e9, 我们可以直接把二分的左端设置为0, 右端设置为1e9

判断x天是否满足条件的函数复杂度为$ O(n) $ 而二分查找复杂度为$ O(logn) $ , 故总时间复杂度为$ O(nlogn)$

判断函数 :

bool can(int mid, vector<int>& b, int m, int k) {
int cnt = 0;
for (int i = 0; i < b.size(); ++i)
{
if(b[i] <= mid)
cnt++;
else
cnt = 0;
if(cnt==k){
cnt = 0;
m--;
}
if(m==0)
return true;
}
return false;
}

搜索函数 :

int minDays(vector<int>& bloomDay, int m, int k) {
if (k*m > bloomDay.size())
return -1;
int l = 0;
int r = 1e9;
while (l < r) {
//int mid = (l + r) >> 1; 这里用下面的方式更安全, 因为这种方式相加可能会溢出 (不是指这道题)
int mid = l + ((r - l) >> 1);
if (can(mid, bloomDay, m, k))
r = mid;
else
l = mid + 1;
}
return l;
}

最新文章

  1. 【Spring】SpringMVC中浅析Date类型数据的传递
  2. MySQL字符集转换(latin1到utf8)
  3. javascript基础知识-函数
  4. linux 常用目录
  5. vs2010安装和使用
  6. QML按键事件处理
  7. CocoaPods的安装及设置
  8. 对dpkg: error processing package xxx (--configure) 的处理
  9. 关于Spring的69个面试问答——终极列表
  10. android:windowSoftInputMode属性使用 软键盘
  11. 关于Eclipse启动报错,jvm版本不匹配的问题
  12. js 模拟form表单post提交
  13. My MES思路图
  14. JavaScript字符集
  15. Centos7安装vsftpd
  16. Python实现爬虫设置代理IP和伪装成浏览器的方法(转载)
  17. 基于ThinkPHP的在线编辑器调用
  18. rabbitmq学习(二) —— helloword!
  19. 敏感词过滤的算法原理之DFA算法
  20. 多线程编程初探——OO第二单元作业回顾

热门文章

  1. Spring注入的对象到底是什么类型
  2. java-五大内存图
  3. 基于Unity实现像素化风格的着色器
  4. Python的大小整数池跟深浅copy
  5. eatwhatApp开发实战(十四)
  6. jQuery——选择器效率
  7. 03_K近邻算法
  8. 如何利用 Python 爬虫实现给微信群发新闻早报?(详细)
  9. MySQL 可重复读,差点就我背上了一个 P0 事故!
  10. Java Word中的文本、图片替换功能