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

leetcode 75. 颜色分类(medium)(优质解法)

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

代码:

class Solution {public void sortColors(int[] nums) {int left=-1,right=nums.length,i=0;while(i<right){if(nums[i]==0){left++;swap(nums,left,i);i++;}else if(nums[i]==1){i++;}else{right--;swap(nums,right,i);}}}public void swap(int[] nums,int i,int j){int tmp=nums[i];nums[i]=nums[j];nums[j]=tmp;}
}

题解:

        本题的含义很清晰,对于数组中 0,1,2 三种数据,我们要将其进行排序,如果用普通的排序方法来解决该题不是最好的办法

        该题要把数组中的数据分为 3 个区间,分别是等于 0,1,2 的区间,我们可以通过定义两个指针来帮助划分区间,如下图所示:

        其中 left 指针指向最后一个 0 的位置,right 指针指向第一个 2 的位置,i 指针用来遍历数组,划分遍历到的数据

        i 指针遍历数组时会遇到以下 3 种情况:

        (1).nums[ i ] = 0 ,需要将 0 数据放到 [ 0,left ],区间,所以需要先执行 left++,为 0 数据留出一个位置,交换 left 和 i 下标对应的数据,left ++ 以后指向的数据为 1,将 1 交换到 i 下标刚好放到了 1 区间,所以直接 i ++ 去处理下一个数据即可,依次要执行的代码是: left++ ,swap( ledt,i ) ,i++

        (2).nums[ i ] = 1 ,由于 1 区间就在 i 下标之前,所以当前遍历到的数据 1 实际上就在 1 区间中,直接 i++ 即可

        (3).nums[ i ] = 2,需要将 2 数据放到 [ right , nums.length-1] 区间,先让 right - - ,为 2 数据留出一个位置,交换 right 和 i 下标对应的数据,right - - 以后指向的数据是未处理的数据,该未处理的数据经过交换到达了 i 下标,所以此时还需要对 i 下标指向的数据进行处理,i 指针不能 ++,依次要执行的代码是:right - -,swap ( right , i ) ,

        当 i = right 时就不存在未处理的数据了,处理完毕,划分结束

相关文章:

  • 每日一练:LeeCode-347. 前 K 个高频元素(中) - 【优先级队列】
  • docker-compose Install TeamCity
  • git教程——日常工作git使用流程
  • Android Matrix画布Canvas旋转Rotate,Kotlin
  • Xcode 编译速度慢是什么原因?如何提高编译速度?
  • 太阳系三体模拟器
  • PHP序列化总结1--序列化和反序列化的基础知识
  • UEFI模拟环境搭建——windows+EDKII
  • TiDB 7.1 多租户在中泰证券中的应用
  • Django框架:入门指南与常用命令
  • 状态模式-概述
  • 网络交换机端口管理会面临的问题
  • 在线客服选择要点分析:如何挑选适合您需求的客服解决方案
  • Zookeeper-Zookeeper应用场景实战(二)
  • ElementUI的Table组件行合并上手指南
  • [LeetCode] Wiggle Sort
  • CSS相对定位
  • HTTP中的ETag在移动客户端的应用
  • miaov-React 最佳入门
  • MySQL-事务管理(基础)
  • php面试题 汇集2
  • rabbitmq延迟消息示例
  • Spring Boot MyBatis配置多种数据库
  • tweak 支持第三方库
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 百度小程序遇到的问题
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 力扣(LeetCode)56
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 微服务核心架构梳理
  • 赢得Docker挑战最佳实践
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #在 README.md 中生成项目目录结构
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (多级缓存)缓存同步
  • (十六)Flask之蓝图
  • (算法)求1到1亿间的质数或素数
  • (一) storm的集群安装与配置
  • (转载)(官方)UE4--图像编程----着色器开发
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 无限分类
  • .net/c# memcached 获取所有缓存键(keys)
  • .net网站发布-允许更新此预编译站点
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ABC275A] Find Takahashi 题解
  • [AI Google] Ask Photos: 使用Gemini搜索照片的新方法