news 2026/9/13 7:05:59

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
千问 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])写交换逻辑特别优雅?需要我帮你把这几道同类型的“荷兰国旗”变体题也列出来吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 7:05:48

Apache POI深度实践:替代EasyExcel的性能与可控性方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 7:02:44

Spring全家桶核心技术解析与最佳实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 7:01:07

Pietra-Ricci指数在频谱感知中的创新应用与Matlab实现

1. 项目概述&#xff1a;Pietra-Ricci指数在频谱感知中的跨界应用Pietra-Ricci指数&#xff08;PRI&#xff09;这个原本活跃在经济不平等性分析领域的指标&#xff0c;最近被我们团队成功移植到了无线通信的频谱感知场景。这种跨界融合产生的Pietra-Ricci指数检测器&#xff0…

作者头像 李华
网站建设 2026/9/13 6:58:11

Rust+Tauri开源视频剪辑器WolfCut技术深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华