力扣最热一百题——颜色分类

news2024/9/29 6:42:16

目录

题目链接:75. 颜色分类 - 力扣(LeetCode)

题目描述

示例

提示:

解法一:不要脸用sort

Java写法:

运行时间

解法二:O1指针

Java写法:

重点

运行时间

C++写法:

运行时间

时间复杂度和空间复杂度

总结


题目链接:75. 颜色分类 - 力扣(LeetCode)

注:下述题目描述和示例均来自力扣

题目描述

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

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

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

示例

示例 1:

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

示例 2:

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

提示:

  • n == nums.length
  • 1 <= n <= 300
  • nums[i] 为 01 或 2

进阶:

  • 你能想出一个仅使用常数空间的一趟扫描算法吗?


解法一:不要脸用sort

        既然题目都说了不让用sort,那么我这种一生逆骨的选手是必须要用一下的嘿嘿。

Java写法:

class Solution {
    public void sortColors(int[] nums) {
        Arrays.sort(nums);
    }
}

运行时间

真爽啊哈哈哈哈哈哈哈哈哈


解法二:O1指针

Java写法:

class Solution {
    public void sortColors(int[] nums) {
        // p0用于交换0
        int p0 = 0;
        // p1用于交换1
        int p1 = 0;
        // 进入交换逻辑
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 1) {
                // 遇到1
                int temp = nums[i];
                nums[i] = nums[p1];
                nums[p1] = temp;
                p1++;
            } else if (nums[i] == 0) {
                // 遇到0
                int temp = nums[i];
                nums[i] = nums[p0];
                nums[p0] = temp;
                // 确保在遇到 0 时,p0 和 p1 之间的元素都是 1
                if (p0 < p1) {
                    temp = nums[i];
                    nums[i] = nums[p1];
                    nums[p1] = temp;
                }
                p0++;
                p1++;
            }
        }
    }
}

重点

  • 变量定义

    • p0:用于指向 0 的位置。
    • p1:用于指向 1 的位置。
  • 循环遍历数组

    • 当遍历到元素 1 时,代码会将其与 p1 位置的元素交换,然后 p1 向右移动一位。
    • 当遍历到元素 0 时,代码会将其与 p0 位置的元素交换,然后 p0 向右移动一位,p1 也向右移动。
  • if (p0 < p1) 逻辑

    • 这一条件判断是为了确保在遇到 0 时,p0p1 之间的元素都是 1
    • 这样做的目的是在 0 被移动到前面时,同时也要把 1 移动到 p1 的位置,确保 1 被正确放在 0 的右边。
  • 避免重复处理

    • 只有在 p0 小于 p1 时,才进行这次交换,因为这表示 p0p1 之间有 1,需要将当前的 01 进行交换,以保持排序。

运行时间

C++写法:

class Solution {
public:
    void sortColors(vector<int>& nums) {
        // p0 用于交换 0
        int p0 = 0;
        // p1 用于交换 1
        int p1 = 0;
        // 进入交换逻辑
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] == 1) {
                // 遇到 1
                swap(nums[i], nums[p1]);
                p1++;
            } else if (nums[i] == 0) {
                // 遇到 0
                swap(nums[i], nums[p0]);
                // 确保在遇到 0 时,p0 和 p1 之间的元素都是 1
                if (p0 < p1) {
                    swap(nums[i], nums[p1]);
                }
                p0++;
                p1++;
            }
        }
    }
};

运行时间

时间复杂度和空间复杂度


总结

        Ez就完事啦~~~~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python库matplotlib之二

Python库matplotlib之二 figureAxessubplot figure matplotlib.pyplot.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue, FigureClass<class ‘matplotlib.figure.Figure’>, clearFalse, **kwargs) num&#xff0c;int 或 str 或 fi…

Starfyre:一款使用纯 Python 创建响应式前端应用的 Python Web 框架

Starfyre 是一款基于 WebAssembly (WASM) 的 Python Web 框架&#xff0c;它允许你使用纯 Python 创建响应式前端应用。这意味着你可以轻松地构建交互式、实时应用程序&#xff0c;无需繁琐的 JavaScript 代码。Starfyre 基于 Pyscript 实现客户端功能&#xff0c;并通过 pyxid…

【每天学个新注解】Day 9 Lombok注解简解(八)—@Synchronized、@Locked

Synchronized 通过锁代码块的方式实现同步锁。 当synchronized修饰类属性时&#xff0c;通常用于定义同步代码块&#xff0c;此时需要指定一个锁对象。这个锁对象通常是类的某个私有静态成员变量&#xff0c;因为类属性是静态的&#xff0c;所以锁也应该是静态的&#xff0c;以…

【Python】YOLO牛刀小试:快速实现视频物体检测

YOLO牛刀小试&#xff1a;快速实现视频物体检测 在深度学习的众多应用中&#xff0c;物体检测是一个热门且重要的领域。YOLO&#xff08;You Only Look Once&#xff09;系列模型以其快速和高效的特点&#xff0c;成为了物体检测的首选之一。本文将介绍如何使用YOLOv8模型进行…

二叉搜索树的介绍、模拟实现二叉搜索树、leetcode---根据二叉树创建字符串、leetcode---二叉树的最近公共祖先等的介绍

文章目录 前言一、二叉搜索树的介绍二、模拟实现二叉搜索树三、leetcode---根据二叉树创建字符串四、leetcode---二叉树的最近公共祖先总结 前言 二叉搜索树的介绍、模拟实现二叉搜索树、leetcode—根据二叉树创建字符串、leetcode—二叉树的最近公共祖先等的介绍 一、二叉搜索…

57 长短期记忆网络(LSTM)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录长短期记忆网络&#xff08;LSTM&#xff09;门控记忆元输入门、忘记门和输出门候选记忆元 (相当于RNN中计算 H t H_t Ht​)记忆元隐状态 从零开始实现初始化模型参数定义模型训练和预测 简洁实现小结练习 长短期记忆网络&#xff08;LSTM&a…

0基础学习CSS(六)字体

CSS 字体 CSS字体属性定义字体&#xff0c;加粗&#xff0c;大小&#xff0c;文字样式。 serif和sans-serif字体之间的区别 在计算机屏幕上&#xff0c;sans-serif字体被认为是比serif字体容易阅读 CSS字型 在CSS中&#xff0c;有两种类型的字体系列名称&#xff1a; 通用字体…

Java | Leetcode Java题解之第443题压缩字符串

题目&#xff1a; 题解&#xff1a; class Solution {public int compress(char[] chars) {int n chars.length;int write 0, left 0;for (int read 0; read < n; read) {if (read n - 1 || chars[read] ! chars[read 1]) {chars[write] chars[read];int num read …

解读文本嵌入:语义表达的练习

【引子】近来在探索并优化AIPC的软件架构&#xff0c;AI产品经理关于语义搜索的讨论给了自己较多的触动&#xff0c;于是重新梳理嵌入与语义的关系&#xff0c;遂成此文。 文本转换成机器可理解格式的最早版本之一是 ASCII码&#xff0c;这种方法有助于渲染和传输文本&#xff…

win10系统K8S安装教程

准备工作 电脑硬件&#xff1a;支持虚拟化的CPU&#xff0c;内存最好在32G以上&#xff0c;16G也可以操作系统&#xff1a;window10 专业版 1 开启虚拟化 1.1 BIOS 由于主板和CPU的品牌不太一样&#xff0c;这里的操作仅供参考&#xff0c;以Intel的平台为例&#xff1a; …

【刷点笔试面试题试试水】有符号变量与无符号变量的值的转换

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: 注意无符号类型与有符合类型参与计算会做类型提升,有符合的变为无符号…

加法器以及标志位

加法器的结构&#xff1a; OF&#xff08;溢出标志位&#xff09;&#xff0c;SF&#xff08;符号标志位&#xff09;&#xff0c;ZF&#xff08;0标志位&#xff09;&#xff0c;ZF&#xff08;进位/借位标志位&#xff09; 有符号数看标志位&#xff1a;OF&#xff0c;SF 无符…

ubuntu 不用每次输入sudo的四种方式

在Ubuntu系统中&#xff0c;如果不希望每次执行需要管理员权限的命令时都输入sudo&#xff0c;有几种方法可以实现这一目标。以下是一些详细的方法&#xff1a; 第一种方式: 切换root用户 (如果你有足够的权限) # 修改root密码命令(没有设置的用户需要设置一下) consolaadmin…

面试中顺序表常考的十大题目解析

在数据结构与算法的面试中&#xff0c;顺序表是一个常见的考点。它作为一种基础的数据结构&#xff0c;涵盖了多种操作和概念&#xff0c;以下将详细介绍面试中关于顺序表常考的十大题目。 &#x1f49d;&#x1f49d;&#x1f49d;如果你对顺序表的概念与理解还存在疑惑&#…

【Threejs进阶教程-着色器篇】8. Shadertoy如何使用到Threejs-基础版

【Threejs进阶教程-着色器篇】8. Shadertoy如何使用到Threejs - 基础版 前七篇地址,建议按顺序学习致谢带我入门的[X01动力装甲]大佬本文适用范围怎么样在Shadertoy中画出正圆形shadertoy中的坐标系比例转换理解Shadertoy的fragCoord理解Shadertoy中的iResolution 转移Shaderto…

SigmaStudio淡入淡出增益控件(Single SW slew vol(adjustable))延时分析

斜率范围1~23&#xff0c;参考12khz正弦波&#xff08;-17.99db,调减15.2db&#xff09;作为分析依据 一、淡入时间与斜率关系 斜率1-----淡入延时时间大概0.08毫秒 斜率2—淡入延时时间大概0.2毫秒 斜率3–淡入延时时间按大概0.5毫秒 斜率4–淡入延时时间大概1毫秒 斜率5–淡…

C++学习笔记之结构体

C学习笔记之结构体 https://www.runoob.com/cplusplus/cpp-struct.html 结构体是C中一种由用户自定义的数据类型&#xff0c;允许存储不同类型的数据项 1、定义结构体 使用struct语句定义结构体 结构体与C中的类看起来结构相似&#xff0c;同样是可以在其中定义成员变量和成员…

picgo + typora + gitee图床

Picgo打造个人图床&#xff0c;稳定又安全 解决Typora笔记上传到CSDN图片无法显示的问题 typora中

完全二叉树的节点个数 C++ 简单问题

完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层&#xff0c;则该层包含 1~ 2h 个节点。 示例 1&#xff…

蓝桥杯—STM32G431RBT6(RTC时钟获取时间和日期)

一、RTC是什么&#xff0c;有什么用&#xff1f; 在 STM32 中&#xff0c;RTC&#xff08;Real-Time Clock&#xff0c;实时时钟&#xff09;主要有以下作用&#xff1a; 时间保持&#xff1a;即使在系统断电情况下&#xff0c;也能持续记录时间。&#xff08;需要纽扣电池供电…