当前位置: 首页 > 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.zskr.cn/news/1458077.html

相关文章:

  • Carnice-V2-27b-GGUF完全指南:如何快速部署27B参数的AI智能体模型
  • 从零到专业:用ComfyUI中文工作流打造你的AI创作工作室
  • NTK MLP构造与事实存储能力深度解析
  • 怎样让旧Mac焕发新生:OpenCore Legacy Patcher完整实战指南
  • 604张工地实拍水泥泵车图+VOC格式XML标注,单类别检测直接可用
  • Flan-T5-TSA-THoR扩展应用:如何自定义训练自己的数据集
  • BioLinkBERT-large未来展望:医学AI的下一个突破点在哪里?
  • 为什么你的AI播客系统总在第三周崩溃?揭秘API耦合度超阈值(>6.8)的致命设计缺陷
  • Windows 11终极优化神器:Chris Titus Tech WinUtil完整使用指南
  • 深入GTX收发器:手把手教你用Verilog实现Aurora 8B/10B协议的核心数据通路
  • 如何快速部署CALM2-7B模型?超简单的Python实现教程与示例代码
  • cspresnet50.ra_in1k实战:从零开始构建图像分类应用
  • QJoin:基于强化学习的动态模糊连接技术解析
  • C++仿函数以及STL内置仿函数
  • 不止于抓包:用mitmdump+Python脚本实现App请求自动修改与数据清洗
  • Python为何成为TVA的神经与感官系统(5)
  • 终极指南:用OpenCore Legacy Patcher让旧Mac运行最新macOS的完整教程
  • GPT-5.5+具身智能:保险理赔流程重铸的临界点
  • 秩基半参数拟似然协方差估计方法解析与应用
  • 终极指南:5步让老旧Mac重获新生,运行最新macOS系统
  • 别再手动写C接口了!用Simulink Coder把模型一键打包成DLL(附VS2015配置避坑)
  • Python为何成为TVA的神经与感官系统(7)
  • 从割裂到共生:AI工具与CMS/CDP/DRM系统深度整合的12个关键接口协议详解
  • 使用LLaMA Factory微调Qwen2-0.5B:从零开始定制你的AI助手
  • AI内容生成×精准投放×实时归因——智能营销黄金三角落地手册(含GDPR合规配置模板)
  • Anki记忆卡片工具完整指南:如何用科学方法高效记忆知识
  • 测试左移遇上AI右延:当ChatGPT生成用例、Claude分析日志、LLM驱动探索性测试——你还在手动点点点?
  • 2026年专业的天津和平企业搬家/天津南开大件搬家公司高分推荐 - 品牌宣传支持者
  • CANN社区SoftmaxCrossEntropyWithLogits算子设计
  • 实战指南:基于快马平台开发符合国内需求的ai儿童故事生成器