首页 > 其他分享 >LeetCode 75 颜色分类

LeetCode 75 颜色分类

时间:2024-08-04 16:06:56浏览次数:11  
标签:p2 分类 指向 nums 元素 75 数组 LeetCode 指针

题目描述

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。

思路

可以使用单个指针扫描两遍或者三指针扫描一遍的方法

思路1 单指针扫描两遍

指针i初始指向数组的第一个元素,指针j初始也指向数组的第一个元素,第一遍用j遍历整个数组,当j指到的数为0时,将其与指针i所指元素交换,同时i加1;第二遍用j从i位置开始遍历,当j指向的数为1时,将其与指针i所指元素交换,同时i加1

思路2 三指针扫描一次

指针p0初始指向数组第一个元素,指针p2指向数组最后一个元素,指针i初始指向数组第一个元素,指针i从前往后遍历直到与p2相遇为止,当i指向元素为0时就和p0所指元素交换,当i指向元素为2时就与p2所指元素交换并且i本次不往后移动,因为从p2交换过来的数还没有进行判断

代码

思路1代码

//单指针扫两遍,第一遍把所有的0交换到数组最左边,第二编把所有的1交换到剩下数组范围的最左边
    public void sortColors(int[] nums) {
        int i = 0, j = 0;
        for (; j < nums.length; j++) {
            if (nums[j] == 0) {
                nums[j] = nums[i];
                nums[i] = 0;
                i++;
            }
        }
        j = i;
        for (; j < nums.length; j++) {
            if (nums[j] == 1) {
                nums[j] = nums[i];
                nums[i] = 1;
                i++;
            }
        }
    }

思路2代码

public void sortColors(int[] nums) {
    int p0 = 0, p2 = nums.length - 1;
    int i = 0;
    while (i <= p2) {
        if (nums[i] == 0) {
            nums[i] = nums[p0];
            nums[p0] = 0;
            p0++;
            i++;
        } else if (nums[i] == 2) {
            nums[i] = nums[p2];
            nums[p2] = 2;
            p2--;
        } else {
            i++;
        }
    }
}

标签:p2,分类,指向,nums,元素,75,数组,LeetCode,指针
From: https://www.cnblogs.com/zawaludo/p/18341843

相关文章

  • 「LeetCode Top100」之哈希篇
    1.两数之和题目链接:https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-100-liked解题状态:通过标签:数组、哈希表思路:通过创建一个哈希表来保存数组中的元素,每当遍历一个元素时,若哈希表中不存在另一个与之相加为目标值的元素,就将元素插入......
  • 15.75.【C语言】表达式求值
    目录一.整型提升1.定义2.一.整型提升1.定义C语言中整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升2.整型提升的原因:表达式的整型运算要在CPU的相应运算器件......
  • 基于深度学习的电子邮件分类系统的设计与实现(开题报告)
    毕业论文(设计)开题报告学院:计算机科学与通信工程学院专业:计算机科学与技术学号:年级:学生姓名指导教师论文(设计)题目基于深度学习的电子邮件分类系统的设计与实现与本课题有关的国内外研究情况:垃圾邮件没有一个统一的定义,一般被理解为“不请自到的邮件”还有......
  • 基于深度学习的电子邮件分类系统的设计与实现
    目录引言1第一章绪论21.1课题研究背景和意义21.1.1研究背景21.1.2研究意义21.2国内外研究现状及发展趋势31.2.1国外研究现状31.2.2国内研究现状31.2.3发展趋势41.3论文的主要工作51.4论文的组织安排5第二章相关理论概述72.1开发语言......
  • 基于深度学习的电子邮件分类系统的设计与实现(中期汇报表)
    本科生毕业论文(设计)中期汇报表(学生填写)学院计算机科学与通信工程学院专业计算机科学与技术姓名学号设计地点江苏大学指导教师设计(论文)题目基于深度学习的电子邮件分类系统的设计与实现毕业设计(论文)中期工作小结一、毕业设计的任务本文......
  • Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断
    对于使用GAF-PCNN-MATT、GASF-CNN、GADF-CNN技术来进行多特征输入数据的分类预测或故障诊断,你可以考虑以下步骤:数据准备:准备你的多特征输入数据集,确保数据的质量和一致性。每个样本应该包含多个特征。特征提取:使用GramianAngularField(GAF)、GramianAngularSecto......
  • LeetCode 1387. Sort Integers by The Power Value
    原题链接在这里:https://leetcode.com/problems/sort-integers-by-the-power-value/description/题目:Thepowerofaninteger x isdefinedasthenumberofstepsneededtotransform x into 1 usingthefollowingsteps:if x iseventhen x=x/2if x is......
  • 【leetcode详解】另一棵树的子树 (C++递归:思路精析&& 过程反思)
    思路详解:总体框架:对root树进行先序遍历,如果当前结点(记为cur)的值和subRoot的根节点值相等时,就开始判断 以cur为根节点的树和子树是否结构一样?如何判断两棵树是否结构完全相同?分析:一提到“树”结构,很容易想到在(先/中/后序)遍历上做文章,请教了AI后笔者得知,如果两棵树......
  • 解密动态规划:简单易懂的方法和分类大揭秘
    动态规划是一种解决问题的算法思想,它通过将问题划分成多个子问题并进行递推求解,从而得到最优解。以下是简单易懂的动态规划方法以及动态规划的分类:简单易懂的动态规划方法:确定状态:分析问题,找出问题的关键参数,并将其抽象为状态。确定状态转移方程:确定状态之间的关系,即如何从......
  • leetcode数论(2521. 数组乘积中的不同质因数数目)
    前言经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。数论包含最大公约数(>=2个数)、最大公约数性质、最小公倍数、区间范围质因素计数(最下间隔)、质因素分解、判断质数、平方根、立方根、互质、同余等等。描述给你一个正整数数组......