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

leetcode 75 颜色分类

一、题目描述

二、解题思路

整体思路

可以采用三指针划分解决这个问题。本题思路与leetcode283移动零的思路一致。

具体思路

采用三指针的方法来解决,left用于标记全为0的区间的右端点,right用于标记全为2的区间的左端点,i用于遍历向量。

过程模拟

我们借助示例1来模拟三指针划分的过程。

(1)初始化left=-1,right=nums.size(),i=0

(2)此时nums[i]==2,执行swap(nums[--right],nums[i])

注意:此时i不可以加一,因为交换过来的数是未知的

(2)接下来两次nums[i]==0,执行swap(nums[++left],nums[i++])两次

(3)此时nums[i]=2,执行swap(nums[--right],nums[i])

(4)接下来的两次nums[i]=1,执行i++两次

(5)i==right,算法结束

规律总结

(1)初始化三指针,left=-1,right=nums.size(),i=0;

(2)i<right时进行循环:

<1>如果nums[i]==1,i++;

<2>如果nums[i]==0,swap(nums[++left],nums[i++]);

<3>如果nums[i]==2,swap(nums[--right],nums[i]);

三、代码实现

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

class Solution {
public:void sortColors(vector<int>& nums) {//三指针for(int left=-1,right=nums.size(),i=0;i<right;){if(nums[i]==1) i++;else if(nums[i]==0) swap(nums[++left],nums[i++]);else{swap(nums[--right],nums[i]);}}}
};

http://www.xdnf.cn/news/1481167.html

相关文章:

  • OS项目构建效能改进策划方案
  • 神马 M60S++ 238T矿机参数解析:高效SHA-256算法比拼
  • Docker加速下载镜像的配置指南
  • 计算机网络:物理层---数据通信基础知识
  • 【C++ 11 模板类】tuple 元组
  • 嵌入式笔记系列——UART:TTL-UART、RS-232、RS-422、RS-485
  • 旧电脑改造linux服务器2:安装系统
  • 软考中级习题与解答——第二章_程序语言与语言处理程序(3)
  • AD渗透中服务账号相关攻击手法总结(Kerberoasting、委派)
  • 数据仓库概要
  • 【selenium】网页元素找不到?从$(‘[placeholder=“手机号“]‘)说起
  • PyQt5 入门(上):开启 GUI 编程之旅
  • python advance -----object-oriented
  • URI与URL区别:资源ID和地址差异
  • Vue3中Vite的介绍与应用
  • 第1课:开篇:RAG技术与DeepSeek模型全景导读
  • Cloudflare for SaaS 实现 CNAME 接入 CDN 支持国内外智能分流建站
  • AI Agent侵入办公室
  • Android Audio Patch
  • 长尾关键词优化驱动SEO流量增长
  • 链动2+1模式:全渠道整合与用户角色化的商业逻辑与行为动机探析
  • ElasticSearch原理
  • CAN总线学习
  • HarmonyOS:通过组件导航设置信息提醒
  • 贪心算法应用:机器人路径平滑问题详解
  • 9月6日笔记
  • 让机器具有主动性-主动性算法[01]
  • HuggingFace Trainer(回调可视化)
  • 木棉EZ100-Pro 15.5G矿机参数解析:Etchash算法与高效能耗
  • Day27 函数2 装饰器