当前位置: 首页 > news >正文

Qwen模型 Max LeetCode 2790. 长度递增组的最大数目 TypeScript实现

哈哈,刚聊完 Java 版,现在要 TypeScript 版是吧?没问题!我超爱 TS 的类型安全,写起来特别安心~来,咱们把这道 **LeetCode 2790. 长度递增组的最大数目** 用 TypeScript 实现得又优雅又高效 ✨

---

### 🧠 思路回顾(快速过一遍)

我们要用 `usageLimits` 数组中的每个元素作为“某个下标最多能参与的组数”,构造尽可能多的**非空组**,且第 i 个组的大小严格大于前一个(即第1组1人,第2组2人……第k组k人)。

关键点:
- 每组必须由**不同下标的元素**组成(所以第 g 组需要 g 个不同下标)
- 下标 i 最多出现在 `usageLimits[i]` 个组中
- 目标:最大化组数 k

✅ 贪心策略:
将 `usageLimits` **升序排序**,然后从前向后累加资源。只要当前累积的总“可用人次” ≥ 构造前 `groups + 1` 个组所需的总人数(即 `(groups+1)*(groups+2)/2`),就说明可以多建一组!

这个逻辑在 TS 里一样成立,而且写起来更清爽~

---

### ✅ TypeScript 实现

```ts
function maxIncreasingGroups(usageLimits: number[]): number {
// 升序排序
usageLimits.sort((a, b) => a - b);

let total = 0n; // 使用 BigInt 防止大数溢出(虽然题目数据可能不会,但安全第一!)
let groups = 0;

for (const limit of usageLimits) {
total += BigInt(limit);
// 计算构造 groups+1 个组所需的最小总人次:1 + 2 + ... + (groups+1)
const needed = BigInt(groups + 1) * BigInt(groups + 2) / 2n;

if (total >= needed) {
groups++;
}
}

return groups;
}
```

> 💡 **为什么用 `BigInt`?**
> 虽然 LeetCode 测试用例中 `usageLimits.length <= 10^5`,单个值也 ≤ 10^9,但 `(groups+1)*(groups+2)/2` 在 groups 接近 1e5 时会达到 ~5e10,仍在 `Number` 安全整数范围内(`Number.MAX_SAFE_INTEGER ≈ 9e15`)。
> 所以其实用 `number` 也可以,但用 `BigInt` 更严谨,尤其在面试中展示你考虑了边界情况,加分!✨

如果你不想用 BigInt,也可以这样写(更简洁):

```ts
function maxIncreasingGroups(usageLimits: number[]): number {
usageLimits.sort((a, b) => a - b);

let total = 0;
let groups = 0;

for (const limit of usageLimits) {
total += limit;
// 注意:这里用 long-like 计算,TS 中 number 是 double,但整数运算安全
if (total >= (groups + 1) * (groups + 2) / 2) {
groups++;
}
}

return groups;
}
```

✅ 这个版本在 LeetCode 上完全可以通过!

---

### 🔍 举个小例子验证

输入:`[3, 3, 3]`

- 排序后:`[3,3,3]`
- i=0: total=3 → need 1 → groups=1
- i=1: total=6 → need 3 (1+2) → 6≥3 → groups=2
- i=2: total=9 → need 6 (1+2+3) → 9≥6 → groups=3

返回 `3` ✅
确实可以:
- 组1:用任意1个
- 组2:用任意2个
- 组3:用全部3个
每个下标用了3次,刚好满足!

---

### 📌 小贴士

- 别忘了 `.sort()` 默认是字符串排序,必须传比较函数 `(a, b) => a - b`
- 这题本质是**资源分配 + 贪心验证**,不是 DP 哦!很多人一开始想复杂了
- 时间复杂度:**O(n log n)**,空间 O(1)

---

怎么样?是不是比 Java 还清爽?😄
如果你正在刷题备战,这种“数学+贪心”类题目最近可太常见了!要不要再来一道类似的练练手?比如 LeetCode 2791 或者 2813?我可以陪你一起拆解~

http://www.rkmt.cn/news/1409462.html

相关文章:

  • 2026年当前武汉专业复印纸公司深度解析与选择指南 - 2026年企业资讯
  • 如何快速轻松地删除 iPhone/iPad 上的提醒事项
  • 从计算器到FPGA:深入浅出聊聊CORDIC算法,它凭什么能优雅地算开方?
  • 抖音无水印下载:从手动保存到自动化批量采集的终极方案
  • 从零构建Simulink C模块:S-Function Builder实战指南
  • 2026小红书爆款攻略:算法时代的种草秘籍
  • 终极指南:3分钟掌握FSearch极速文件搜索神器,告别Linux找文件烦恼!
  • Surface Pro/Laptop 用户必看:不关Secure Boot,搞定Arch Linux双系统与驱动签名全流程
  • 高光谱图像超分辨率技术:DPSR架构与实时处理优化
  • 2026年国内有哪些专业的GEO服务商/公司推荐?真实测评
  • CrossOver容器访问Mac外置硬盘?手把手教你映射D盘(保姆级图文)
  • 从CS231N作业到你的实验:Tiny-ImageNet数据集完整使用指南(含预处理与可视化)
  • 基于断言与故障分析的RTL级近似计算自动化探索方法
  • 告别Keil!在Ubuntu 20.04上用VSCode+GCC玩转国产HC32L110单片机
  • 哈夫曼树
  • MSP430F5529新手避坑指南:CCS导入driverlib库报错?手把手教你搞定环境搭建
  • 为什么你的ChatGPT简历总被筛掉?揭秘LinkedIn数据验证的4大语义断层点及动态重写公式
  • 告别手写文档:IDEA+EasyYapi实现接口文档的自动化生成与同步
  • 单词搜索:二维网格中的 DFS 回溯与剪枝优化
  • 超越SIFT和CNN?聊聊GIST特征在场景分类中的独特优势与实战应用
  • 2026年第二季度温州全屋定制直销厂家选择指南:品质与设计的双重考量 - 2026年企业资讯
  • 别再死记硬背了!用Python+Matplotlib可视化理解梯度、散度与旋度
  • 终极Illustrator脚本合集:25个免费工具让设计效率飙升300%
  • AI工具集:本地Node基于云端AI模型使用Stdio封装自定义MCP服务
  • 别再死记公式了!用Python的NumPy和Pandas实战理解样本均值、方差与中心矩
  • 口碑好的儿童节蛋糕哪家专业?太原唯客时光蛋糕的专业维度解析
  • 条码扫描模组选型指南:从成像、解码与集成维度做技术评估
  • Claude「永久大脑」,真的来了!
  • 你的`.pth`文件真的坏了吗?用Python脚本快速校验PyTorch权重文件完整性的两种方法
  • rf2o_laser_odometry实战排雷:从启动失败到TF树构建的完整指南