leetcode1283 使结果不超过阈值的最小除数

这道题第一思路是用二分查找
因为使用二分法:所以复杂度为O(n*logk), k介于 left=sum/threshold(向下取整) 和 right=num_max之间;
而right<=10^6, left>=1; 故logk <=6log2(10) ~=18;
主要是估算可能除数的上下界,上面的估算方法略强于 1~10^6(即不估算);
解释一下上面估算的原因:因为每个元素除以除数d都要向上取整,向上取整结果res=(num+x)/d (此时x介于[0,d),x使得该式余数为0),
相当于将元素放大了,sum_res>=sum 必然存在,因此有 threshold >= ans >= sum_res/d >= sum/d, ans为各元素除以 d以后累加的
真实结果,由于有向上取整,必然要大于等于sum_res/d;经过缩放后可以得到threshold>=sum/d (表达式除法均为c++的向下取整除法),
从而有d>=sum/threshold;
也因为有向上取整,所以只要元素不为0,那么只要d超过了最大值num_max,此时无论d如何增加,最后运算结果ans总是为n-k, n为数组的
长度,而k为数组中零元素的个数;所以可知,d的最大边界为right=num_max;
从而可得二分法的左右边界[left,right] 为 [sum/threshold, num_max];
作者:joelwang
链接:https://leetcode-cn.com/problems/find-the-smallest-divisor-given-a-threshold/solution/er-fen-cha-zhao-beat-100-by-joelwang/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public:
int smallestDivisor(vector<int>& nums, int threshold) {
long int sum=;
int right=INT_MIN;
int res=INT_MAX;
for(int num:nums){
sum+=num;
if(num>right) right=num;
}
int left=sum/threshold;
if(left==) left=;
while(left<right){
int mid=left+(right-left)/;
int tmp=;
for(int num:nums){
tmp+=num/mid+( ( num % mid == ) ? : );
}
if(tmp<=threshold) {
if(mid<res) res=mid;
right=mid;
}else{
left=mid+;
}
}
return res;
}
};
leetcode1283 使结果不超过阈值的最小除数的更多相关文章
- Leetcode 5281. 使结果不超过阈值的最小除数
又一次参赛,除了第一道Easy题和第二道Medium外,剩下的两道在有限时间内,要么没思路,要么思路不对,超时,要么有思路调试出错,还需多加练习! (这次的第三题,在循环从1开始,直到找到满足地为止, ...
- JVM调优之服务内存超过阈值报警
今早收到一条短信,具体报警信息如下: [UMP JVM监控内存报警]应用名:发券worker(jdos_couponwkr);KEY[coupon.send.worker.jvm],主机名:[host ...
- 如何交换两个等长整形数组使其数组和的差最小(C和java实现)
1. 问题描述: 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小. 2. 求解思路: 当前数组a和数组 ...
- leetcode 日常清单
a:excellent几乎一次ac或只有点小bug很快解决:半年后再重刷: b:经过艰难的debug和磕磕绊绊或者看了小提示才刷出来: c:经过艰难的debug没做出来,看答案刷的: 艾宾浩斯遗忘曲线 ...
- LeetCode-第 166 场周赛
LeetCode-第 166 场周赛 1281.subtract-the-product-and-sum-of-digits-of-an-integer 1282.group-the-people-g ...
- OpenCV-Python 图像阈值 | 十五
目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值. 你将学习函数cv.threshold和cv.adaptiveThreshold. 简单阈值 在这里,问题直截了当.对于每个像素,应用相同 ...
- 线性判别分析(LDA)准则:FIsher准则、感知机准则、最小二乘(最小均方误差)准则
准则 采用一种分类形式后,就要采用准则来衡量分类的效果,最好的结果一般出现在准则函数的极值点上,因此将分类器的设计问题转化为求准则函数极值问题,即求准则函数的参数,如线性分类器中的权值向量. 分类器设 ...
- mysql数据库监控工具-MONyog的配置和基本使用项
测试数据传输前,研发要求需要监控10万,50万,100万数量级的数据在传输过程数据库服务器的资源消耗情况,因为数据传输服务是定时任务执行,配置10秒中一次,一次处理500条,处理完10万数据可能要半个 ...
- poj1639,uva1537,uvalive2099,scu1622,fzu1761 Picnic Planning (最小限制生成树)
Picnic Planning Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10742 Accepted: 3885 ...
随机推荐
- mORMot学习笔记3 数据集转Json
usesSynCommons, SynDB, SynOleDB; procedure TForm1.DataToJsonClick(Sender: TObject); var Conn: TOleDB ...
- 07_Redis_Sorted Set命令
一:Redis 有序集合(sorted set):有序set集合,专门用来做排行榜 Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员 ------- (有序不重复) 不 ...
- 实用: 将程序的内容写出到excel中
pom <!-- 读取excel文件 --><dependency> <groupId>org.apache.poi</groupId> <art ...
- JavaScript教程——函数(arguments 对象)
arguments 对象 定义 由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数.这就是arguments对象的由来. arguments对象包含了 ...
- Aizu - 1383 Pizza Delivery (最短路图+DAG上的割边)
题意:给出一张有向图,每条边有长度,对于每条边,你要回答将该边的方向取反后,从起点到终点的最短距离是增加or减小or不变. 首先求出起点到所有点的最短距离和所有点到终点的最短距离(两次DIjkstra ...
- Force git to overwrite local files on pull 使用pull强制覆盖本地文件 转载自:http://snowdream.blog.51cto.com/3027865/1102441
How do I force an overwrite of local files on a git pull? I think this is the right way: $ git fetch ...
- url传参特殊字符问题(+、%、#等)
这样的话,你传的大多数带特殊符号的参数,都能在后台拿到,但是, url中可能用到的特殊字符及在url中的经过编码后的值:(此表格借鉴) 字符 特殊字符的含义 URL编码 # 用来标志特定的文档 ...
- 关于properties文件的读取(Java/spring/springmvc/springboot)
一.Java读取properties文件 1.基于ClassLoder读取配置文件 注意:该方式只能读取类路径下的配置文件,有局限但是如果配置文件在类路径下比较方便. Properties prope ...
- 自动上传本地图片和word图片(word图片需使用从word粘贴功能)
在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...
- asp.net上传大文件的解决方案
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...