当前位置:网站首页>二分法中等 LeetCode6133. 分组的最大数量
二分法中等 LeetCode6133. 分组的最大数量
2022-08-01 21:16:00 【18阿鲁】
描述
给你一个正整数数组 grades ,表示大学中一些学生的成绩。你打算将 所有 学生分为一些 有序 的非空分组,其中分组间的顺序满足以下全部条件:
第 i 个分组中的学生总成绩 小于 第 (i + 1) 个分组中的学生总成绩,对所有组均成立(除了最后一组)。
第 i 个分组中的学生总数 小于 第 (i + 1) 个分组中的学生总数,对所有组均成立(除了最后一组)。
返回可以形成的 最大 组数。
示例 1:
输入:grades = [10,6,12,7,3,5]
输出:3
解释:下面是形成 3 个分组的一种可行方法:
- 第 1 个分组的学生成绩为 grades = [12] ,总成绩:12 ,学生数:1
- 第 2 个分组的学生成绩为 grades = [6,7] ,总成绩:6 + 7 = 13 ,学生数:2
- 第 3 个分组的学生成绩为 grades = [10,3,5] ,总成绩:10 + 3 + 5 = 18 ,学生数:3
可以证明无法形成超过 3 个分组。
示例 2:
输入:grades = [8,8]
输出:1
解释:只能形成 1 个分组,因为如果要形成 2 个分组的话,会导致每个分组中的学生数目相等。
提示:
1 <= grades.length <= 105
1 <= grades[i] <= 105
分析
数组元素的大小不重要,只要判断数组长度能够凑出多少个分组。
二分法计算
class Solution {
public int maximumGroups(int[] grades) {
int n = grades.length;
int left = 1, right = n;
while (left < right) {
int mid = (right - left + 1) / 2 + left;
if ((1+mid) > 2 * n / mid) {
right = mid - 1;
} else if ((1+mid) < 2 * n / mid){
left = mid;
} else {
return mid;
}
}
return left;
}
}
边栏推荐
猜你喜欢
ISC2022 HackingClub white hat summit countdown 1 day!Most comprehensive agenda formally announced!Yuan universe, wonderful!
用户量大,Redis没法缓存响应,数据库宕机?如何排查解决?
An online JVM FullGC made it impossible to sleep all night and completely crashed~
2022牛客多校联赛第五场 题解
30+的女性测试人面试经验分享
with语句和上下文管理器
图的邻接矩阵存储
JS提升:手写发布订阅者模式(小白篇)
方舟:生存进化官服和私服区别
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
随机推荐
Transformer学习
How to encapsulate the cookie/localStorage sessionStorage hook?
360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
15 分钟带你入门 Grafana
property语法
LeetCode每日一题(1807. Evaluate the Bracket Pairs of a String)
响应式织梦模板美容整形类网站
方舟生存进化是什么游戏?好不好玩
深拷贝浅拷贝
响应式织梦模板清洁服务类网站
【中文树库标记---CTB】
微服务负载均衡器Ribbon
Nacos 配置中心
人工智能可信安全与评测
sizeof的详细解说和与strlen的区别
如何让定时器在页面最小化的时候不执行?
C陷阱与缺陷 第7章 可移植性缺陷 7.10 首先释放,然后重新分配
R语言进行相关的操作
Popular explanation: what is a clinical prediction model
Kubernetes 如何实现组件高可用