当前位置: 首页 > 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.jsqmd.com/news/900456/

相关文章:

  • 2026年当前武汉专业复印纸公司深度解析与选择指南 - 2026年企业资讯
  • ManySpeech-CLI:开箱即用的本地命令行语音识别工具
  • AI工具集:本地Node基于云端AI模型使用Stdio封装自定义MCP服务
  • 基于断言与故障分析的RTL级近似计算自动化探索方法
  • 为什么你的ChatGPT健身计划总失败?运动生理学博士揭穿5大AI认知盲区,附可立即复用的Prompt黄金模板
  • Linux内核开发者视角:深入SMMUv3驱动,手把手拆解dma_map_sg()的IOVA连续映射魔法
  • 如何快速轻松地删除 iPhone/iPad 上的提醒事项
  • 国产第一!Qwen3.7-Max全端上线,好易智算同步首发,企业级Agent底座再添新选择
  • 收藏 | RAG技术揭秘:让AI回答更靠谱,小白也能轻松上手学大模型!
  • 5G毫米波信道模型对比:3GPP与NYUSIM如何影响系统设计与性能评估
  • 别再乱选电容了!手把手教你搞定阻容降压电路,从0.47uF到安规X2电容的保姆级选型指南
  • 避坑指南:你的PLS-DA结果可靠吗?聊聊mixOmics包里的scale、logratio与near.zero.var参数设置
  • 面壁开源1B端侧模型,AI Yang的“端云协同”路线得到验证
  • 基于 HarmonyOS 6.0 的日程备忘应用:时间线组件与任务状态管理详解
  • 基于OpenCL的FPGA信号处理:低延迟流水线设计与工程实践
  • 别再只盯着准确率了!手把手教你用Python计算语义分割的MIoU(附完整代码)
  • 抖音无水印下载:从手动保存到自动化批量采集的终极方案
  • 无广告免费壁纸工具,手机电脑壁纸随心更换
  • 大模型下半场:从“模型能力”到“系统能力”,RAG、Agent如何重塑产业竞争格局?
  • C语言中求余运算符的使用解读
  • AI应用可观测性工程2026:LLM调用追踪评估与监控全栈实践
  • 保姆级教程:用CAT_pack和IMG/VR4数据库搞定宏基因组contig物种分类(附蛋白ID与TaxID映射避坑指南)
  • 跨越十个数量级的能效革命:从GPU到忆阻器,神经计算硬件的能耗全景与路径选择
  • 睡眠呼吸暂停监测:轻量化CNN与ECG信号分析
  • jQuery Mobile 页面
  • 项目介绍 MATLAB实现基于BMA-XGB 贝叶斯模型平均(BMA)结合极端梯度提升(XGB)进行股票价格预测(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励
  • LeetCode 22. 括号生成(JS里的回溯算法)
  • CPT Markets:多维度评测平台透明度与稳定性
  • 终极指南:3分钟掌握FSearch极速文件搜索神器,告别Linux找文件烦恼!
  • 基于 HarmonyOS 6.0 的日程备忘应用:待办事项板与提醒卡片详解