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

LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅

LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅

🔗 题目链接

👉 https://leetcode.cn/problems/sort-colors/


📖 内容概要

给定一个只包含0、1、2的数组nums,要求原地排序,使得相同颜色相邻,并按0 → 1 → 2顺序排列。
本题本质是荷兰国旗问题(Dutch National Flag Problem),要求一次遍历、常数空间完成排序。


💡 解题思路(重点)

核心思想:三指针一次遍历

我们将数组划分为四个区间:

[0 ... l-1] → 全是 0 [l ... i-1] → 全是 1 [i ... r] → 未处理 [r+1 ... n-1] → 全是 2

三个指针含义

指针含义
l下一个放0的位置
r下一个放2的位置
i当前遍历指针

遍历规则(非常关键)

当遍历到nums[i]时:

✅ 情况 1:nums[i] == 0
  • 说明当前元素应该去左边
  • 交换nums[i]nums[l]
  • l++i++

👉为什么i++

  • 因为换过来的数一定是1(已处理过)

✅ 情况 2:nums[i] == 2
  • 说明当前元素应该去右边
  • 交换nums[i]nums[r]
  • r--
  • ⚠️ 不移动i

👉为什么i不动?

  • 换过来的数还没检查过(可能是 0 / 1 / 2)

✅ 情况 3:nums[i] == 1
  • 已经在正确位置
  • 直接i++

终止条件

while(i<=r)

i超过r,说明所有元素都已分区完成。


✅ AC 代码(Java)

classSolution{publicvoidsortColors(int[]nums){intl=0,r=nums.length-1;inti=0;while(i<=r){if(nums[i]==0){swap(nums,i,l);i++;l++;}elseif(nums[i]==2){swap(nums,i,r);r--;}else{i++;}}}privatevoidswap(int[]nums,inta,intb){inttmp=nums[a];nums[a]=nums[b];nums[b]=tmp;}}

⏱️ 复杂度分析

指标复杂度
时间复杂度O(n)(一次遍历)
空间复杂度O(1)(原地排序)

✅ 总结

  • 本题是经典的数组双指针 / 三指针问题
  • 核心在于理解指针不移动的原因
  • 是面试中高频出现的原地排序技巧

✅ 一次遍历
✅ 不使用额外空间
✅ 逻辑紧凑,代码优雅

http://www.jsqmd.com/news/946577/

相关文章:

  • MATLAB版IMCRA语音降噪工具包:含可运行代码、测试音频与频谱对比图
  • Carnice-V2-27b-GGUF完全指南:如何快速部署27B参数的AI智能体模型
  • 告别阻塞延时!在FreeRTOS里优雅地采集ADS1115数据(STM32+CubeMX配置)
  • 三步搞定B站无水印视频下载:BiliDownload让你的视频收藏更纯净
  • AutoGen多LLM协同架构:构建可审计、可降级的AI团队协作系统
  • TA-Lib国内实操包:三平台安装避坑指南+A股指标调用代码+C源码对照图解
  • 中文NLP四大任务实战代码集:情感分析、句子匹配、NER识别与句向量建模
  • 从零到专业:用ComfyUI中文工作流打造你的AI创作工作室
  • distilroberta-base-rejection-v1性能分析:98.87%准确率的秘密
  • GPT-5.5 Pro实战指南:工程上下文建模与知识工作自动化
  • 怎样让旧Mac焕发新生:OpenCore Legacy Patcher完整实战指南
  • 不止S参数:用HFSS电压/电流源激励,给你的PCB电源完整性仿真开个挂
  • 避坑指南:NBIOT设备接入OneNET时,为什么你的AT+MIPL指令总报错?从IMEI获取到数据上传的全流程排错
  • Mac Mouse Fix终极指南:如何让普通鼠标在Mac上超越触控板体验
  • NTK MLP构造与事实存储能力深度解析
  • AntiMicroX游戏手柄映射终极指南:5分钟让任何游戏支持手柄操作
  • MATLAB车牌识别GUI工具:33张实拍图+定位识别一体化操作
  • 告别CLI手忙脚乱:用OpenConfig和gRPC实现网络设备配置自动化(实战Docker环境搭建)
  • 5分钟搭建专业级AI投资团队:多智能体股票分析框架实战指南
  • 604张工地实拍水泥泵车图+VOC格式XML标注,单类别检测直接可用
  • Mac Mouse Fix:让你的普通鼠标在macOS上拥有超越触控板的体验
  • 对抗训练中的灾难性过拟合现象与LAP解决方案
  • Flan-T5-TSA-THoR扩展应用:如何自定义训练自己的数据集
  • Copilot与ChatGPT技术区别:模型权属、服务边界与合规实践
  • 6G语义通信与智能体AI架构解析
  • 支付与超充融合:微信出海和宁德6分钟快充的底层协同逻辑
  • BioLinkBERT-large未来展望:医学AI的下一个突破点在哪里?
  • GPT-5.5工作流革命:从提问到委派的AI协作者范式
  • Windows 11终极优化神器:Chris Titus Tech WinUtil完整使用指南
  • 用Python手把手教你搞定Gluon-6L3机械臂的正逆解(附完整代码与避坑指南)