java数据结构与算法刷题-----LeetCode75. 颜色分类

Java刷题大全(笔试题)【大厂必备】(基础) Java全网最全刷题大全 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

1. 双指针两次遍历

解题思路:时间复杂度O( n n n),空间复杂度O( 1 1 1),需要遍历两次数组
  1. 第一遍遍历,将所有0放到前面
  2. 第二遍遍历,将所有1放在0后面
代码

在这里插入图片描述

class Solution {
    //交换
    public static void changePosition(int arr[],int i,int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    public void sortColors(int[] nums) {
        int n = nums.length;
        int left = 0;//指向交换位置
        for(int right = 0;right<n;right++){//将0换到left位置
            if(nums[right] == 0) changePosition(nums,left++,right);
        }
        for(int right = left;right<n;right++){//将1换到left位置
            if(nums[right] == 1) changePosition(nums,left++,right);
        }
    }
}

2. 三指针

解题思路:时间复杂度O( n n n),空间复杂度O( 1 1 1),只遍历1次数组
  1. p0指向下一个0需要放置的位置,同理p1指向下一个1需要放置的位置
  2. 我们使用p2指针来进行遍历数组,如果发现p2指向的是1就和p1位置交换,同时p1++
  3. 当p2指向0时,需要和p0交换,但是有一种特殊情况
  1. 例如0011220,其中1是p0位置,2是p1位置,0是p2位置
  2. 此时,我们发现p1的位置是超过p0的,也就是说,此时p1后面一定是1,而p0的下一个插入位置,就在p1的后面,也就是p0比如指向1
  3. 此时我们要让p0和p2交换位置,结果为0001221。我们发现,虽然现在p0位置放上了0,但是p0原来指向的1,却放到了p2位置
  4. 也就是说,我们为了换一个0,把1交给了p2.此时就需要p1和p2将这个1要回来
  5. 因此只要我们p0和p2交换完成后,发现p0<p1,就需要再让p1和p2额外进行一次交换,结果为0001122
代码

在这里插入图片描述

class Solution {
    //交换
    public static void changePosition(int arr[],int i,int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    public void sortColors(int[] nums) {
        int p0 = 0;int p1 = 0;int p2 = 0;//三快慢指针,p2最快,p1其次,p0最后
        while(p2<nums.length) {//
            if(nums[p2] == 1) changePosition(nums,p1++,p2);//如果当前p2指向1,则和p1指针交换
            else if(nums[p2] == 0) {//如果当前p2是0
                changePosition(nums,p0,p2);//和p0交换位置
                //如果此时p0和p1指向的位置不是同一个,也就是p1在p0前面,那么说明p0当前位置原来是1
                //p0和p2交换后,也就是将p2位置的0放到了p0位置。而p0原来位置的1,放在了p2位置
                //此时就需要将p2位置的1,换给p1.也就是必须p1和p2再次交换
                if(p0<p1) changePosition(nums,p1,p2);
                p0++;p1++;//0向前走,1就得向前走
            }
            p2++;
        }
    }
}
LeetCode 第75题:颜色分类 通过这几种方法,我们可以灵活地应对不同的情况。单指针法适合简单直观的需求,双指针法适合快速解决复杂排列问题,而三路快排则是荷兰国旗问题的经典解法。我们今天的技术博客就到这里,希望通过这些幽默风趣的比喻和详细的代码解析,能让你对这道题目有更深的理解。 阅读详情

相关推荐

深入解析EXI协议在ISO15118-2命令测试中的编解码实践

本文深入探讨了EXI协议在ISO15118-2车桩通信标准中的关键作用与实践方法。EXI编解码测试是确保通信准确性与效率的核心环节,文章详细介绍了从搭建测试环境、选择工具库到编写完整测试代码的全过程,并分析了结果差异的常见原因与调试技巧,为电动汽车充电系统的开发者提供了实用的技术指南。

potato的博客 1050

牛客网——Java刷题篇

牛客-找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决

chenchenchencl的博客 1万+

解决Windows无法卸载补丁的实用方法

无法卸载Windows补丁可能是一个棘手的问题,但通过上述方法,你应该能够找到解决方案。无论是通过控制面板、命令提示符还是手动重置Windows更新组件,都有可能成功卸载问题补丁。如果所有方法都无效,系统还原将是一个值得尝试的备选方案。希望这篇文章能帮助你解决无法卸载补丁的问题。

mmoo_python的博客 1万+

【刷题记录⑨】Java工程师丨字节面试真题(三)

我几乎每天都会刷题训练来使自己对各种算法随时保持一个清晰的状态。要知道眼过千遍不如手过一遍,想成为一名合格的开发工程师,更要逼迫自己养成动手的好习惯。

陈橘又青的博客 5930

什么是信噪比?信噪比越大好还是越小好?

在进行声音增强的时候,往往需要考虑声音信号和噪声的信噪比,那么信噪比是什么呢?越大越好还是越小越好,此处引入百度百科的解读: 信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。 同样是“原信号不存在”还有一种东西叫“失真”,失真和噪声实际上有一

码匀的博客 7万+

无线传感网络的Matlab实现

Matlab是一种功能强大的数值计算和数据分析工具,也可以用于无线传感网络的建模和仿真。根据实际需求,可以进一步扩展和优化模型,例如考虑节点能量消耗、网络路由、数据融合等方面的问题。函数用于绘制节点之间的连接关系,其中第一个参数是邻接矩阵,描述了节点之间的连接关系。这里使用了一个4个节点的简单例子,可以根据实际需求修改节点数量和连接关系。可以使用Matlab中的图形绘制函数来可视化节点的位置和连接关系。在无线传感网络中,节点的能量是一个关键因素。通过计算节点的剩余能量,可以评估节点的能量消耗情况。

2301_79331387的博客 250

卧槽!这几个 Java 网站,有点刺激!

看到这个界面就爱了,里面包括大量的算法题,这些算法题是大厂面试必出的题型,据说掌握了这些算法题后,你可以吊打中国任何一家大厂,是不是真的咱也不知道,毕竟咱们没做过几道题。干净清爽,基本上所有的问题你在 StackOverflow 都能找到答案,你可以提出公共问题,也可以提出私人问题,甚至可以在 StackOverflow 上找工作。包含各种内容,总揽,编程语言,工具,特性,JVM 等,只不过语言有一些生硬,需要强大的英文功底,不过现在有谷歌翻译后我觉得这些问题也都不是问题了。现在重新好好复习手上的。

ssdrrg的博客 2920

【Halcon-2D测量】set_metrology_object_param 函数功能(用于配置计量对象常规参数)

HALCON算子 set_metrology_object_param 是2D计量模块的核心配置工具,用于动态修改计量对象的测量区域、边缘检测和几何拟合参数。该算子需在检测前调用,支持批量或单独修改对象参数,包含三类关键参数:测量区域(如长度、间距)、边缘检测(如平滑Sigma、阈值)和几何拟合(如RANSAC阈值、最小分数)。使用时需注意参数互斥规则(如measure_distance优先于num_measures)和多线程同步要求。算子无输出参数,仅修改计量模型内部状态,需配合apply_metrolo

weixin_45590420的博客 294

力扣刷题必备(java版)

判断为空采用是stack.isEmpty();Queue和Deque的方法相同,故可忽略stack和queue的区别,统一记后一种方法。

weixin_51951103的博客 1937

基于自适应小波阈值算法的图像去噪

自适应小波阈值算法是一种基于小波变换的方法,它相对于传统的小波阈值去噪方法具有更好的性能和鲁棒性。该算法首先对图像进行小波变换,然后根据小波系数的大小确定一个自适应的阈值,将小波系数与阈值进行比较,大于阈值的系数被保留,小于阈值的系数被置零。在上述代码中,首先选取了小波函数sym4进行小波分解,然后根据标准差计算出阈值,使用wthresh函数进行阈值处理,最后进行反变换得到处理后的图像。该GUI界面与前面的自适应小波阈值算法代码结合,实现了图像的去噪,并提供了可视化的效果。

与其临渊羡鱼,不如退而结网 559

【YOLOv8-pose姿态识别部署至RK3588:模型训练到RKNN落地,让人体姿态分析精度与边缘推理速度双突破】

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 331

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode网址:https://leetcode.com/ LeetCode中文版:https://leetcode-cn.com/ 二.刷题指南 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出 精力全放在解决具体问题上题目有丰富的讨论 可以参考别人的思路精确了解自己代码在所有提交代码中

cpb____的博客 2万+

结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式

高速列车是现代交通运输的重要组成部分,其运行速度高、载客量大,对安全性和可靠性提出了极高的要求。轴箱轴承作为高速列车的关键部件之一,承担着传递载荷和支撑车轴的重要作用。然而,由于长期运行在高速、重载和复杂工况下,轴箱轴承容易出现疲劳磨损、润滑失效和裂纹等故障,从而影响列车的安全性。本项目旨在结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式。

xiaoheshang_123的博客 331

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java实现 LeetCode 75 颜色分类

75. 颜色分类 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算...

南 墙 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【刷题目录1】按标签刷LeetCode热题HOT100 java题解分类汇总

1.栈 2.堆 3.贪心算法 4.排序 5.位运算 6.树 7.深度优先搜索 8.广度优先搜索 9.并查集 10.图 11.设计

乾坤未定,你我皆是黑马 3466

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode 热题 HOT 100 Java题解——75. 颜色分类

LeetCode 热题 HOT 100 Java题解75. 颜色分类双指针复杂度分析 75. 颜色分类 题目: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭

qq_20067165的博客 374

LeetCode 热题 100 之 75.颜色分类

本文介绍了两种解决颜色分类(荷兰国旗)问题的算法:计数重排法和三指针法。计数重排法通过统计0、1、2的数量后重排数组,简单直观但需两趟扫描;三指针法(p0/p1/p2)则通过一趟扫描完成排序,利用指针划分区间实现高效交换。文章还详细解析了三种官方Java解法,包括两次遍历分阶段排序、p0/p1双指针和p0/p2双指针方法,对比了它们的优缺点。其中p0/p2双指针法被推荐为最优解,因其鲁棒性强且时间复杂度为O(n),空间复杂度O(1)。不同方法适用于不同场景,从新手入门到面试最优解均有覆盖。

2401_87662859的博客 1029

去面试字节前端,竟然考算法,是不是有病?算法如何刷题?全文高能!倾心整理【建议收藏!】

为什么字节跳动的前端面试需要那么难的算法题? - 知乎 昨天有个985的美女粉丝说,去面试字节的前端,竟然要考算法,搞的自己很懵逼! 插图1 面试前端,竟然要考算法!是不是脑子瓦特(water)了! 在小孟看来,这真的狠正常! 大家都知道,现在的IT行业非常的卷,都卷成啥样了,本来科班的人就很多进入了计算机行业,还有其他的专业不断的往IT行业涌入,例如生化环材一些天坑专业。 所以现在的计算机培训机构才异常的火爆!很多机构几个月竟然能把一个非科班专业的学生包装成一两年经验的开发者。 但是很多包装

程序员springmeng 8990

Leetcode算法Java全解答--75. 颜色分类

Leetcode算法Java全解答–75. 颜色分类 文章目录Leetcode算法Java全解答--75. 颜色分类题目想法结果总结代码我的答案大佬们的答案测试用例其他 题目 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中...

cmqwan的博客 7920

leetcode刷题记录(九十七)——75. 颜色分类

75. 颜色分类 - 力扣(LeetCode)75. 颜色分类 - 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 [https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95] 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。

weixin_45994787的博客 903

Leetcode刷题java之75. 颜色分类

执行结果: 通过 显示详情 执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户 内存消耗 :35 MB, 在所有 Java 提交中击败了80.96%的用户 题目: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色...

逆水行舟,不进则退 459

【Leetcode hot 100】 75.颜色分类

摘要 本文分析了LeetCode 75题"颜色分类"的两种解法。题目要求将包含0、1、2的数组原地排序为0→1→2的顺序。解法1采用计数排序:先统计各数字出现次数,再按顺序填充数组,时间复杂度O(n)(两趟遍历),空间O(1)。解法2使用三指针法:通过left、right、curr指针一次遍历完成排序,left标记0的右边界,right标记2的左边界,curr遍历并交换元素,实现O(n)时间复杂度和O(1)空间复杂度。两种方法各有优劣:计数排序简单直观,适合初学者;三指针法效率更高,是面

专注Java和MySQL领域知识分享 755

Leetcode75. 颜色分类

Leetcode75. 颜色分类 题目: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案...

会流泪de鱼的博客 225
上一篇: java数据结构与算法刷题-----LeetCode451. 根据字符出现频率排序
下一篇: java数据结构与算法刷题-----LeetCode435. 无重叠区间
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值