Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • 每日算法

    • 信
    • 独一无二的出现次数
    • 按奇偶排序数组Ⅱ
    • 两数之和
    • 两数相加2
    • 寻找两个正序数组的中位数
    • 二叉树最大深度
    • 洗牌算法
    • 移动零
    • 数组元素排列组合
    • 上升下降字符
    • 最大间距
    • 四数相加2
    • 最大三角周长
    • 在排序数组中查找元素的起始位置
    • 最富有客户的资产总量
    • 打印规定循环字符串
    • 从m个数中选择n个数的组合
    • 复原IP地址
    • 有效的数独
    • 旋转图像
    • 缺失的第一个正整数
    • 第 N 个泰波那契数
    • 轮转数组
    • 爬楼梯
    • 斐波那契数列
    • 使用最小花费爬楼梯
    • 打家劫舍
    • 删除并获得点数
    • 颜色分类
    • 字母异分词分组
    • 加一
    • N叉树的层序遍历
    • N叉树的前序遍历
    • N叉树的后序遍历
    • N叉树的深度
    • 二叉树的中序遍历
    • 和并两个有序数组
    • 移除元素
    • 删除有序数组中的重复项Ⅱ
    • 多数元素
    • 找到数组的中间位置
    • 搜索插入位置
    • 最长连续序列
    • 三数之和
    • 找到字符串中所有字母异位词
    • 有效的括号
    • 最小栈
    • 求出硬币游戏的玩家
    • Find the odd int
    • Regex validate PIN code
    • Find the next perfect square
  • 折腾

  • 分享

  • 随笔
  • 每日算法
kros
2024-05-09

颜色分类

题目:颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。 看到0、1、2的顺序我们想到的方法就是对数组nums进行排序,不管冒泡、快排还是其它方法手撸一个排序就行,所以这里使用排序以外的方法来解决这个问题。 因为只有三种数字,我们可以将0和2的数字抽出来,再将对应的0和1添加到nums的首尾即可,代码如下:

var sortColors = function(nums) {
  // 2的数量
  let num2 = 0
  // 0的数量
  let num0 = 0
  for(let i = 0; i < nums.length; ) {
      if (nums[i] == 2) {
          nums.splice(i, 1);num2++
      } else if(nums[i] == 0) {
          nums.splice(i, 1);num0++
      }else {
          i++
      }
  }
  // 将0、2分别添加到首尾
  nums.unshift(...new Array(num0).fill(0))
  nums.push(...new Array(num2).fill(2))
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

通过上面代码可以发现,使用Array.fill可以重置数组值,那么我们可以统计0、1、2的数量再使用fill方法重置数组值,修改上面代码如下:

ar sortColors = function(nums) {
  // 2的数量
  let num2 = 0
  // 0的数量
  let num0 = 0
  for(let i = 0; i < nums.length; i++) {
    nums[i] == 2 && num2++
    nums[i] == 0 && num0++

  }
  // 将0、2分别添加到首尾
  nums.fill(0, 0, num0)
  nums.fill(1, num0, nums.length - num2)
  nums.fill(2, nums.length - num2, nums.length)
  
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上次更新: 2025/09/05, 8:09:00
删除并获得点数
字母异分词分组

← 删除并获得点数 字母异分词分组→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev