大噶好,今天是应景的二分法

文章目录

  • 大噶好,今天是应景的二分法
  • 前言
  • 一、制作 m 束花所需的最少天数
  • 二、二分法的一般模板
  • 总结

前言

从今日打卡题–应景的制作 m 束花所需的最少天数说起。小编前段时间项目DDL,最近开启狂补打卡题模式,一路冲破700大关。当然了, 刷题数量不是目的。科研被卡住的时候,刷题不失为不错的调剂。
虽然今年阿里系取消了面试手撕代码的环节,但算法与数据结构着实为 solid foundation.


一、制作 m 束花所需的最少天数

给定整数数组 bloomDay,以及两个整数 m 和 k 。
现需要制作 m 束花。制作花束时,需要使用花园中相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好可以用于一束花中。
返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。

力扣的刷题模式还是十分友好的。 小编在面试WXG的时候不仅是ACM代码模式,而且完全没有给示例数据。 从面向笔面的角度考虑,牛客网刷题还是必不可少的。就小编之前参加过的笔面来看,只有MS是核心代码模式, 其余都是ACM模式。

代码如下(示例):

class Solution:def minDays( self , bloomDay:List[int] ,m:int ,k:int)->int:#总共花的数量n= len(bloomDay);#如果所需花束大于花园总共的花束数量if m*k>n:return -1;i , j =min(bloomDay), max(bloomDay);#二分while i <j :mid = i+ (j-i)//2;#---------------模拟采花---------------count=0#连续相邻的花朵数res=0#初始化的总共可以制作几束花for x in range(n):#可以采得的花朵数量if bloomDay[x]<= mid:count+=1;# 将花朵编为花束else:res+= count//k;count=0;#跳出循环后需要将剩余花朵编成花束( 一般都需的步骤)res+= count//k;# 二分法边界(背模板吧,兄dei们)if res>=m:j=mid;elif res<m:i=mid+1;          return i;#return j

二、二分法的一般模板

代码如下(示例):

def binarySearch(nums, target):if len(nums) == 0:return -1# 数组的左右极点left = 0right = len(nums)# 终止条件是 left = rightwhile left < right:# 防止数据越界的trick mid =left+ (right - left)//2# 找到 target 时不要立即返回,而是缩小「搜索区间」的上界 right,if nums[mid] == target:# 为什么 right = mid, 因为搜索区间是 [left, right), right 为开区间right = midelif nums[mid] > target:right = midelif nums[mid] < target:left = mid + 1
return left
#return right

总结

二分法的实际运用还是很广泛的。小编在求解优化问题的时候常常需要用到拉格朗日算法, 拉格朗日因子的搜索也常常需要采用二分法完成。
下篇我们讲讲中兴捧月大赛吧!

大噶好,今天是应景的二分法相关推荐

  1. 数值计算大作业:非线性方程求根(二分法、牛顿法、弦截法在Matlab实现)

    作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业. 我把二分法.牛顿法.弦截法求解非线性方程求根的数值计算作业在MATLAB中编程实现.具体的程序详细标注后放在文章附录了,算法数学 ...

  2. c语言10000以内的质数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include int* pt = NULL; // primes_table int pt_size = 0; // primes_ ...

  3. java二分法找数数_JavaSE语言基础之数组二分法查找

    一.概念: 算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较, 如果当前位置arr[k]值等于ke ...

  4. C语言输出素数简单,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include int* pt = NULL; // primes_table int pt_size = 0; // primes_ ...

  5. PHP二分法查找,MYSQL索引即为用了此查找

    算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的.主要思想是:(设查找的数组区间为array[low, high]) (1)确定该区间的中间位置K (2)将查找的值T与array[ ...

  6. 求最大素数的c语言,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include int* pt = NULL; // primes_table int pt_size = 0; // primes_ ...

  7. c语言输出最大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include int* pt = NULL; // primes_table int pt_size = 0; // primes_ ...

  8. 二分法查找(C/C++)

    当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的,默认是按 升序 排好的.时间复杂度:O(logn) 集合中的set和map中使用二分法进行查找的. int BiSearch(char ...

  9. 利用二分法解决 leetcode 378. Kth Smallest Element in a Sorted Matrix

    问题简述 给定一个 n×nn \times n 的矩阵,矩阵中每行和每列的元素都按升序排列.给定一个 k(k∈[1,n2])k (k \in [1, n^2]), 求再整个矩阵中按从小到大排序为 kk ...

最新文章

  1. 007_SpringBoot文件上传
  2. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]
  3. glassfish默认密码_在MySQL上使用含盐密码的GlassFish JDBC安全性
  4. JDK 8功能的可疑方面
  5. git 移动分支指针_理解git 中的HEAD指针branch指针
  6. 使用fastjson工具类json字符串和对象之间的转换
  7. 方正计算机软件保护进超级用户,超级用户权限补丁(SuperSU Pro)含刷机包
  8. Laravel5.1 目录结构解析
  9. Vue遍历对象,数组,v-if、v-if-else、v-else
  10. oracle 删除jobs日志,修改Oracle的Job Scheduler 日志级别及删除运行日志
  11. (数字IC)低功耗设计入门(五)——RTL级低功耗设计(续)
  12. Layer 引入自定义模块
  13. spring4.0.0的配置和使用
  14. 网络运维系列:Ubnt ER-X初始化和开启硬件NAT
  15. 深度好文| Redis面试全攻略
  16. 2022智源大会议程公开 | 预训练大模型论坛
  17. 数据库之MySQL日志管理、备份与恢复
  18. 【博云+智领云】携手云原生大数据领域,开展深度合作
  19. 后缀自动机(模板+例题)
  20. 四少女火爆外网!ControlNet组合拳效果惊人,颠覆AI绘画游戏规则

热门文章

  1. nodejs+vue+elementui社区医院挂号管理系统python
  2. android开发出现错误:Failed to find configured root that contains
  3. linphone 手机上不能接听电话
  4. PostGIS系列课程之Geography
  5. 脑蛋白和计算机意义,冬眠蝙蝠的脑蛋白质组与肝蛋白质组研究
  6. 保姆级傻瓜式icomoon字体图标的下载与使用
  7. icomoon字体图标的使用与引用
  8. 哈工大2022秋计算机系统大作业——程序人生
  9. java扫雷程序,Java扫雷程序,初试Java-JSP教程,Java技巧及代码
  10. 金蝶打开提示中间层连接失败