当前位置: 首页 > news >正文

前端算法专栏-数组-75.颜色分类

介绍

Hi 大家好。我是程序员库里,今天新开一个前端算法专栏。

接下来会分类给大家分享常考算法题目。

很多朋友也是看着这套系列算法拿到很多offer!所以也是想分享给更多朋友,帮助到有需要的朋友。

在这里插入图片描述

分类

数组-三路快排

题目

75. 颜色分类

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

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

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入: nums = [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

示例 2:

输入: nums = [2,0,1]
输出: [0,1,2]

解释

1.定义一个变量zero,初始值为-1,zero变量用来表示0…zero区间全部放0

2.定义一个变量two,初始值为数组的长度,two变量用来表示two…n-1区间全部放2

3.zero+1…n-1区间全部放1,这样数组中就变成了0…1…2

4.开始遍历数组,条件是当i小于数组长度的时候

5.如果遍历的当前元素是1,只把i向右移动一位,即i++。因为 1是在数组的中间,所以不做其他操作。

6.如果遍历的当前元素是2,先将变量two向左移动一位,腾出一个位置,也就是two–。然后将当前的元素2和two所在的位置交换一下位置,此时这个2就移动到了右边,这个时候不能将 i 向右移动一位,需要继续判断 当前这个元素是否为0

7.如果遍历的当前元素是0,先将zero向右移动一位,腾出一个位置,也就是zero++。然后将当前的元素0和zero所在的位置交换一下位置,此时这个0就移动到了左边。然后继续遍历,即i++。

8.遍历完一遍后,所有0就到了左边,所有2就到了右边,所有1就到了中间。即完成了数组排序。

代码

/*** @param {number[]} nums* @return {void} Do not return anything, modify nums in-place instead.*/var sortColors = function(nums) {let zero = -1;// [0...zero] 为0,弄成无效区间let two = nums.length;// [two...n-1] 为2,弄成无效区间for(let i =0;i<two;){if(nums[i] === 1){i++}else if(nums[i] === 2){two--[nums[i],nums[two]] = [nums[two],nums[i]]}else if(nums[i] === 0){zero++[nums[i],nums[zero]] = [nums[zero],nums[i]]i++}}return nums;
};

相关文章:

  • 西南科技大学电路分析基础实验A1(元件伏安特性测试 )
  • 设计模式——RBAC 模型详解
  • vue 使用vuex中的data数据引用问题
  • Type Hints in Python:python的类型注释
  • VIVADO 擦除flash
  • 在Linux本地部署开源自托管导航页配置服务Dashy并远程访问
  • 计算机组成原理-Cache替换算法
  • 【华为OD题库-048】拔河比赛-java
  • Docker+ Jenkins+Maven+git自动化部署
  • 每日一题:LeetCode-283. 移动零
  • 在Django中使用Q对象和条件运算符来构建动态查询
  • DDoS高防IP到底是什么?
  • C# 友元程序集
  • 225. 用队列实现栈 --力扣 --JAVA
  • linux下实现Qt程序实现开机自启动
  • 0基础学习移动端适配
  • Cumulo 的 ClojureScript 模块已经成型
  • ECMAScript入门(七)--Module语法
  • GraphQL学习过程应该是这样的
  • js正则,这点儿就够用了
  • leetcode-27. Remove Element
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 仿天猫超市收藏抛物线动画工具库
  • 回流、重绘及其优化
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 数据结构java版之冒泡排序及优化
  • 用element的upload组件实现多图片上传和压缩
  • - 转 Ext2.0 form使用实例
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C++)八皇后问题
  • (分类)KNN算法- 参数调优
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (黑马C++)L06 重载与继承
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .java 9 找不到符号_java找不到符号
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net 简单实现MD5
  • .NET 指南:抽象化实现的基类
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • [2669]2-2 Time类的定义
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [Bugku]密码???[writeup]
  • [C# 网络编程系列]专题六:UDP编程
  • [CF226E]Noble Knight's Path
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [JavaEE系列] Thread类的基本用法
  • [LeetCode] 626. 换座位
  • [one_demo_2]使用正则表达式过滤字符串
  • [SWPUCTF 2021 新生赛]easyupload1.0
  • [Windows编程] 监视DLL装载/卸载