前端算法专栏-数组-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;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/200101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

import matplotlib.pyplot as pit 报 ImportError: DLL Load failed: 找不到指定的模块。

环境python 3.7&#xff0c;需要安装 numpy1.21.6 | matplotlib 2.2.5 看版本依赖 numpy https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy matplotlib https://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

每次吃一点ORB_Slam3代码 — 1. System类的初始化

文章目录 前言1. 代码调用位置2. 前置知识2.1 Sophus::SE3f 3. 代码细节3.1 System.h&#xff1a;3.2 System初始化函数&#xff1a; 小结 前言 ORB_SLAM3代码对于个人而言&#xff0c;感觉十分复杂。因为没有一些几何视图基础加上C薄弱&#xff0c;所以一直没法入门。基于这种…

CSS特效020:涌动的弹簧效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

商用车的智慧眼车规级激光雷达

1、商用车自动驾驶技术&#xff1a;巨大的降本增效空间 2、感知是第一步&#xff1a;看懂环境路况才能安全的自动驾驶 3、多传感器融合&#xff0c;感知信息冗余&#xff0c;保障自动驾驶安全 4、商用车需要什么样的激光雷达 5、车规级激光雷达的软硬件成熟度及延展性 &#x…

Python三级 每周练习题28

如果你感觉有收获&#xff0c;欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 题目: 1.运行hex(),得到 xa&#xff0c;括号里面填什么? 2.十六进制数100&#xff0c;对应10进制数是多少? 3.int(‘13’,8) 返回值是? 4.int(‘100010’,2) 返回值是? 5.int(‘2af…

模拟实现offsetof宏(详解)

我们在以前学过这个offsetof函数&#xff0c;知道它的功能是求指针相较于起始位置的偏移量&#xff0c;我们今天要来写出一个宏&#xff0c;计算结构体中某成员变量相对于起始位置的偏移。 目录 1.offsetof函数 1.1offsetof函数介绍 1.2offsetof函数代码实现 2.offsetof函数…

漏电保护器工作原理

漏电保护器 漏电保护器是低压线路中最常用的保护器之一&#xff0c;简称漏保&#xff0c;又称漏电开关或漏电断路器。漏电保护器除了具有空开的所有保护功能外&#xff0c;还具备漏电保护功能。 需要了解 一根通电导线可以产生磁场&#xff0c;磁场与电流方向遵循右手螺旋关…

没想到吧!成功的图标设计,只需遵循这几个原则

图标在任何用户界面环境中都是不可或缺的元素。虽然许多图标小到可能被忽视&#xff0c;但它们在解决设计难题和用户体验问题上却起着决定性的作用。作为一名UI设计师&#xff0c;你必须要掌握的基本技巧之一就是图标设计。理解并应用图标设计的原则不仅可以帮助设计师快速定位…

SQL Server :关系模式的键码与闭包计算

一、键码的定义 首先我们给出 键码的定义 如下 定义&#xff1a;已知 R<U,F> 是属性集 U 的关系模式&#xff0c;F是属性集 U 上的一组函数依赖&#xff0c;设 K 为 R<U,F> 中的属性或属性组合&#xff0c;若K ⇒ U - K 且 K 的任何真子集都不能决定 U&#xff0c…

你了解vue的diff算法吗?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中的diff算法 目录 一、是什么 二、比较方式 三、原理分析 小结 一、是什么 diff 算法是一…

CSS新手入门笔记整理:CSS边框样式

边框宽度&#xff1a;boder-width 语法 boder-width:像素值&#xff1b; 边框样式&#xff1a;boder-style 语法 boder-style:取值&#xff1b; 属性值 说明 none 无样式 dashed 虚线 solid 实线 边框颜色&#xff1a;boder-color 语法 boder-color:色值&#xf…

C语言---操作符的详解(下)

目录 1. 结构成员访问操作符 1.1 结构体 1.2结构体成员访问操作符 1.2.1 直接访问 1.2.2 间接访问 2. 操作符的属性 2.1 优先级 2.2 结合性 3. 表达式求值 3.1 整型提升&#xff08;类型小于int&#xff09; 3.2 算术转换&#xff08;类型大于int&#xff09; 1. 结构…

常见的6种工业主板盘点

无论您涉及哪种类型的工业环境&#xff0c;主板都是所有电子元件的关键部件之一。可靠且高效的主板是任何功能系统的核心和灵魂。 不同的主板旨在满足不同的需求&#xff0c;如果您希望系统发挥最佳性能&#xff0c;则必须了解这些需求。本文提供了有关当今流行的6种工业主板的…

2023年09月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题3分,共30分) 第1题 角色为一个紫色圆圈,运行程序后,舞台上的图案是?( ) A: B: C: D:

个人开发者是否能借助开源获利?

前言 近几年国内外开源软件的成倍增长&#xff0c;以及开源软件在互联网领域的比重越来越高&#xff0c;开源软件扮演者越来越重要的角色&#xff0c;所以开源软件不仅推动了技术领域的不断创新和发展&#xff0c;也给个人开发者们提供了越来越多的合作机会和获利的机会。同时&…

深兰科技入选工信部首批“5G+智慧旅游”应用试点项目名

近日&#xff0c;国家文旅部与工信部确定并公布了我国首批《“5G智慧旅游”应用试点项目名单》&#xff0c;深兰科技基于AIGC多模态融合大模型技术开发打造的江汉路“5G智慧旅游”试点项目——武汉市江汉路步行街5G智慧商街创新应用&#xff0c;成功入选该名单。 作为由湖北省文…

[栈溢出+参数跟踪] [ZJCTF 2019]Login

题目来源 buuctf——[ZJCTF 2019]Login 本题主要考察参数溯源的能力。 参考链接 https://zhuanlan.zhihu.com/p/570607303 题目信息 64位&#xff0c;ubuntu16&#xff0c;开了金丝雀 C风格的代码&#xff0c;并且将admin登录信息写入代码中。 溢出点不在这里&#xff0c;但是…

【JavaScript】3.3 JavaScript工具和库

文章目录 1. 包管理器2. 构建工具3. 测试框架4. JavaScript 库总结 在你的 JavaScript 开发之旅中&#xff0c;会遇到许多工具和库。这些工具和库可以帮助你更有效地编写和管理代码&#xff0c;提高工作效率。在本章节中&#xff0c;我们将探讨一些常见的 JavaScript 工具和库&…

python学习过程中一些问题记录总结

工作机器上安装了 两个环境 使用anaconda3 时配置仓库地址不能 拉取到 cv2 DBUtils 使用python2 时 版本低&#xff0c;拉取不到 解决办法&#xff0c;python2不支持下载最新版本的&#xff0c;需要指定下载一个老的版本即可&#xff0c;下个1.3的就OK了 pip install DBU…

爬虫学习 逆向爬虫(六)

多任务异步协程 协程:更高效的利用CPU import timedef func():print("黎明")time.sleep(3)print("还是黎明")func() 等待时机长 sleep时CPU不再工作 IO操作(费时不费力)->阻塞 线程运行阻塞后 移出主线程 移动到下一个 4个任务一个线程 …