![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分
文章平均质量分 56
@Freey
这个作者很懒,什么都没留下…
展开
-
分割数组的最大值+完成所有工作的最短时间(二分答案)
问题描述给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。思路最大值最小,典型的二分,关键在于如何写check函数假设x是最大值的最小值,首先先不考虑最小值这个后缀,即x至少要满足可以将数组连续分成m个和不超过x的连续子数组根据这句话我们有两种判断方法1.把数组分成全部小于x的连续子数组最少可以分成cnt组(即每一组都尽量恰好不超过x的分),则cnt必须满足m>=cnt2.把数组分成m原创 2021-09-06 22:22:08 · 290 阅读 · 0 评论 -
浮点数二分答案+单调队列维护定长区间最值
问题描述一个含有 nn 项的数列,求出每一项前的 mm 个数到它这个区间内的最小值。若前面的数不足 mm 项则从第 11 个数开始,若前面没有数则输出 00。P1440 求m区间内的最小值代码#include <iostream>#define maxn 100010using namespace std;int n,s,t;double l,r,mid,ans,a[maxn],b[maxn],sum[maxn];// sum[i]-min(sum[i-t]~sum[i-s])&原创 2021-08-14 17:41:46 · 98 阅读 · 0 评论 -
二分查找细节
总结l=mid 区间长度为2死循环r=mid 区间长度为1死循环第一个<=x的数组下标错误示范if(nums[mid]<=x) l=mid;这样会导致区间长度为2时死循环,即mid=l=m,r=m+1且满足nums[m]<=x时原因:因为mid是整数除法下取整的,所以mid始终是<=l的,即有可能等于l,而到最后l,r这个区间本身就是不断朝着满足<=x的方向进行搜索的区间,所以最后的l极有可能满足<=mid,所以最后l一直不变mid始终等于l等于mwh原创 2021-04-08 23:33:01 · 99 阅读 · 0 评论 -
愤怒的牛(二分答案)
问题重述解题思路代码在这里插入代码片原创 2021-04-07 23:17:35 · 603 阅读 · 0 评论 -
二分
问题重述81. 搜索旋转排序数组 II已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6原创 2021-04-07 21:47:51 · 62 阅读 · 0 评论