十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

千问 LeetCode 75. 颜色分类 JavaScript实现

千问    LeetCode 75. 颜色分类 JavaScript实现 用 JavaScript 来实现 LeetCode 75颜色分类同样非常经典。针对这道题这里为你提供两种最核心的解法方法一三指针法最优解这是面试官最希望看到的解法。利用三个指针在数组上原地操作left指向下一个 0 应该存放的位置。right指向下一个 2 应该存放的位置。i当前遍历的指针。核心逻辑当 nums[i] 0 时与 left 交换left 和 i 同时右移。当 nums[i] 2 时与 right 交换right 左移注意 i 不动因为从右边换过来的元素还没检查过。当 nums[i] 1 时i 直接右移。var sortColors function(nums) {let left 0, right nums.length - 1, i 0;while (i right) { if (nums[i] 0) { // 遇到 0和 left 交换left 和 i 都前进 [nums[i], nums[left]] [nums[left], nums[i]]; left; i; } else if (nums[i] 2) { // 遇到 2和 right 交换right 后退 // 注意此时 i 不能前进因为从右边换过来的元素还没检查 [nums[i], nums[right]] [nums[right], nums[i]]; right--; } else { // 遇到 1直接前进 i; } }};方法二计数排序法由于元素只有 0、1、2 三种我们可以先统计个数再重新覆盖数组。这种方法逻辑极其简单不容易出错。var sortColors function(nums) {// 1. 统计 0, 1, 2 出现的次数let count [0, 0, 0];for (let num of nums) {count[num];}// 2. 根据统计结果重写数组 let index 0; for (let color 0; color 3; color) { for (let j 0; j count[color]; j) { nums[index] color; } }};面试建议如果是在面试中强烈建议手写方法一这能体现你对数组边界和双指针/多指针技巧的扎实掌握。如果在实际工程开发中且对代码可读性要求更高方法二是更安全、不易写错的选择。如果你刚刷完 Rust 版本对比一下这两种语言的解法是不是发现 JS 的解构赋值[a, b] [b, a]写交换逻辑特别优雅需要我帮你把这几道同类型的“荷兰国旗”变体题也列出来吗
返回列表