ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

元宝 LeetCode 134. 加油站 TypeScript实现

元宝    LeetCode 134. 加油站 TypeScript实现 TypeScript 实现贪心O(n) / O(1) LeetCode 的 TS 版本题面是函数形式不是“class Solution”跟 Python/Rust 略有区别。✅ 标准贪心写法推荐提交function canCompleteCircuit(gas: number[], cost: number[]): number {const n gas.length;let total 0; // 全局油差累计let cur 0; // 从候选起点出发的累计油差let start 0; // 候选起点下标for (let i 0; i n; i) { const diff gas[i] - cost[i]; total diff; cur diff; // 到不了第 i 站起点后移到 i1 if (cur 0) { start i 1; cur 0; } } // 总油量够才有效否则返回 -1 return total 0 ? start % n : -1;} 更函数式的写法先算 total逻辑更直白function canCompleteCircuit(gas: number[], cost: number[]): number {const total gas.reduce((sum, g, i) sum g - cost[i], 0);if (total 0) return -1;let cur 0; let start 0; for (let i 0; i gas.length; i) { cur gas[i] - cost[i]; if (cur 0) { start i 1; cur 0; } } return start % gas.length;}“reduce” 版本可读性不错但会多一次遍历面试时写第一个单遍版本更稳。复杂度维度 值时间 O(n) 单遍或两遍空间 O(1) 仅基础变量三语言对照表方便背模板Python3 Rust TypeScript“total diff”“total gas[i]-cost[i]”“total gas[i]-cost[i]”“start i 1”“start i 1”“start i 1”“return start if total0 else -1”“(start%n) as i32” /“-1”“total0 ? start%n : -1”“List[int]”“Vec”“number[]”边界用例验证// n 1canCompleteCircuit([5], [4]); // 0canCompleteCircuit([3], [5]); // -1// 经典用例canCompleteCircuit([1,2,3,4,5], [3,4,5,1,2]); // 3canCompleteCircuit([2,3,4], [3,4,3]); // -1要不要我再补一个 带 Jest 单元测试的版本或者把 134/135分发糖果)/ 环形链表这类「贪心环形」题做个对比小结
返回列表