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 个组所需的总人数即 (groups1)*(groups2)/2就说明可以多建一组这个逻辑在 TS 里一样成立而且写起来更清爽---### ✅ TypeScript 实现tsfunction 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);// 计算构造 groups1 个组所需的最小总人次1 2 ... (groups1)const needed BigInt(groups 1) * BigInt(groups 2) / 2n;if (total needed) {groups;}}return groups;} **为什么用 BigInt** 虽然 LeetCode 测试用例中 usageLimits.length 10^5单个值也 ≤ 10^9但 (groups1)*(groups2)/2 在 groups 接近 1e5 时会达到 ~5e10仍在 Number 安全整数范围内Number.MAX_SAFE_INTEGER ≈ 9e15。 所以其实用 number 也可以但用 BigInt 更严谨尤其在面试中展示你考虑了边界情况加分✨如果你不想用 BigInt也可以这样写更简洁tsfunction 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]- i0: total3 → need 1 → groups1- i1: total6 → need 3 (12) → 6≥3 → groups2- i2: total9 → need 6 (123) → 9≥6 → groups3返回 3 ✅确实可以- 组1用任意1个- 组2用任意2个- 组3用全部3个每个下标用了3次刚好满足---### 小贴士- 别忘了 .sort() 默认是字符串排序必须传比较函数 (a, b) a - b- 这题本质是**资源分配 贪心验证**不是 DP 哦很多人一开始想复杂了- 时间复杂度**O(n log n)**空间 O(1)---怎么样是不是比 Java 还清爽如果你正在刷题备战这种“数学贪心”类题目最近可太常见了要不要再来一道类似的练练手比如 LeetCode 2791 或者 2813我可以陪你一起拆解