【算法题】2790. 长度递增组的最大数目

news/2025/2/15 22:04:45/

题目:

给你一个下标从 0 开始、长度为 n 的数组 usageLimits 。

你的任务是使用从 0 到 n - 1 的数字创建若干组,并确保每个数字 i 在 所有组 中使用的次数总共不超过 usageLimits[i] 次。此外,还必须满足以下条件:

每个组必须由 不同 的数字组成,也就是说,单个组内不能存在重复的数字。
每个组(除了第一个)的长度必须 严格大于 前一个组。
在满足所有条件的情况下,以整数形式返回可以创建的最大组数。

示例 1:

输入:usageLimits = [1,2,5]
输出:3
解释:在这个示例中,我们可以使用 0 至多一次,使用 1 至多 2 次,使用 2 至多 5 次。
一种既能满足所有条件,又能创建最多组的方式是:
组 1 包含数字 [2] 。
组 2 包含数字 [1,2] 。
组 3 包含数字 [0,1,2] 。
可以证明能够创建的最大组数是 3 。
所以,输出是 3 。
示例 2:

输入:usageLimits = [2,1,2]
输出:2
解释:在这个示例中,我们可以使用 0 至多 2 次,使用 1 至多 1 次,使用 2 至多 2 次。
一种既能满足所有条件,又能创建最多组的方式是:
组 1 包含数字 [0] 。
组 2 包含数字 [1,2] 。
可以证明能够创建的最大组数是 2 。
所以,输出是 2 。
示例 3:

输入:usageLimits = [1,1]
输出:1
解释:在这个示例中,我们可以使用 0 和 1 至多 1 次。
一种既能满足所有条件,又能创建最多组的方式是:
组 1 包含数字 [0] 。
可以证明能够创建的最大组数是 1 。
所以,输出是 1 。

提示:

1 <= usageLimits.length <= 10^5
1 <= usageLimits[i] <= 10^9

java代码:

class Solution {public int maxIncreasingGroups(List<Integer> usageLimits) {int n = usageLimits.size();Collections.sort(usageLimits);int[] nums = new int[n];for (int i = n - 1 ; i >= 0; i--) {nums[n - 1 - i] = usageLimits.get(i);}int ret = 1;int l = 1;int r = n;while (l < r) {int m = l + (r - l) / 2 + 1;if (check(nums, m)) {l = m;ret = Math.max(m, ret);} else {r = m - 1;}}return ret;}public boolean check(int[] nums, int k) {int n = nums.length;int d = 0;for (int i = 0; i < n; i++) {if (Math.max(k - i, 0) <= nums[i]) {if (d > 0) {d -= nums[i] - Math.max(k - i, 0);}continue;} d += k - i - nums[i];}return d <= 0;}
}

http://www.ppmy.cn/news/993480.html

相关文章

Qt信号与槽机制的本质

引入 对象与对象之间的通信有多个方式&#xff0c;如果我们要提供一种对象之间的通信机制。这种机制&#xff0c;要能够给两个不同对象中的函数建立映射关系&#xff0c;前者被调用时后者也能被自动调用。 再深入一些&#xff0c;两个对象如果都互相不知道对方的存在&#xff…

HTML5+CSS3小实例:带标题的3D多米诺人物卡片

实例:带标题的3D多米诺人物卡片 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content…

IDEA中连接虚拟机 管理Docker

IDEA中连接虚拟机 管理Docker &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮…

【Linux命令200例】paste一个用于合并文件的命令行实用工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

Android中图片过大导致OOM的问题

Android中图片过大导致OOM的问题 在Android开发中&#xff0c;图片过大是导致OOM&#xff08;Out of Memory&#xff09;问题的常见原因之一。OOM是指当应用程序占用的内存超过了设备可用的内存限制时&#xff0c;系统会抛出OutOfMemoryError异常。图片过大会占用大量内存&…

【迁移】Mysql数据库备份 迁移

【迁移】Mysql数据库备份 迁移 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有…

在CentOS 7上挂载硬盘到系统的步骤及操作

目录 1&#xff1a;查询未挂载硬盘2&#xff1a;创建挂载目录3&#xff1a;检查磁盘是否被分区4&#xff1a;格式化硬盘5&#xff1a;挂载目录6&#xff1a;检查挂载状态7&#xff1a;设置开机自动挂载总结&#xff1a; 本文介绍了在CentOS 7上挂载硬盘到系统的详细步骤。通过确…

kubernetes之NetworkPolicy

一、背景 如果希望在OSI模型中第三层或第四层控制网络流量&#xff0c;则应该使用NetworkPolicy这个对象&#xff1b;NetworkPolicy以应用为中心&#xff0c;主要用来控制Pod网络流量的进入和流出 二、实例说明 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadat…