Leetcode75. 颜色分类

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

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

进阶:
一个直观的解决方案是使用计数排序的两趟扫描算法。
首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
你能想出一个仅使用常数空间的一趟扫描算法吗?
题解:

  1. 初始化0的最右边界:i=0i = 0i=0。在整个算法执行过程中 nums[idx < i] = 0.
  2. 初始化2的最左边界 :j=n−1j = n - 1j=n−1。在整个算法执行过程中 nums[idx > j] = 2.
  3. 初始化当前考虑的元素序号 :curr = 0.

While   curr<=p2curr <= p2curr<=p2:

  • 若 nums[curr]=0nums[curr] = 0nums[curr]=0 :交换第 currcurrcurr个 和 第 iii 个 元素,并将curr,icurr,icurr,i指针都向右移。
  • 若 nums[curr]=2nums[curr] = 2nums[curr]=2 :交换第 currcurrcurr个和第 jjj 个元素,并将 jjj 指针左移 。
  • 若 nums[curr]=1nums[curr] = 1nums[curr]=1 :将指针 currcurrcurr 右移。

java代码:

 public static void sortColors(int[] nums) {int i = 0;int j = nums.length - 1;int curr = 0;int temp = 0;while (curr <= j) {if (nums[curr] == 0) {temp = nums[curr];nums[curr++] = nums[i];nums[i++] = temp;} else if (nums[curr] == 2) {temp = nums[curr];nums[curr] = nums[j];nums[j--] = temp;} else {curr++;}}}

Leetcode75. 颜色分类相关推荐

  1. LeetCode--75.颜色分类(三路快排,计数排序)

    颜色分类(C) 1. 题目描述 2. 题目解析 3. C语言实现 3.1 三路快排法 3.2 计数排序法 1. 题目描述 难度:中等 2. 题目解析 这道题需要注意一下几点: 原地进行排序,不可以另外 ...

  2. [Swift]LeetCode75. 颜色分类 | Sort Colors

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. Leetcode--75. 颜色分类

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  4. 【数据结构与算法】leetcode75.颜色分类

    链接 题目: 给定一个包含红色.白色和蓝色.共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 我们使用整数 0. 1 和 2 分别表示红色 ...

  5. 【Leetcode刷题篇】leetcode75 颜色分类

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  6. leetcode75 颜色分类

    很多的排序算法如 冒泡 插入 什么的,都是基于比较的, 这题还可以通过 基于 数据下标的算法: 计数排序 来做 下面的解为 partition 的分区方法, 供参考:  思路: 0放左边 2方右边,遇 ...

  7. leetcode75颜色分类

    解法一: class Solution {public:void sortColors(int A[], int n) {int second=n-1, zero=0; //second之后的全是2, ...

  8. 《LeetCode力扣练习》第75题 颜色分类 Java

    <LeetCode力扣练习>第75题 颜色分类 Java 一.资源 题目: 给定一个包含红色.白色和蓝色.共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按 ...

  9. python 三指针解决颜色分类

    颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组, 原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...

最新文章

  1. SAP RETAIL MM42进入商品的销售视图系统提示: No basic purchase price relevant to pricing found with schema RM0000
  2. 访问SAP时提示报错SAP GUI for Windows 720窗口
  3. 详细介绍Linux硬盘挂载步骤
  4. maven导入jar包时冲突的解决
  5. MyBatis使增删改不刷新二级缓存
  6. 关于 TypeScript 内 constructor signature 的一些失败尝试
  7. [jQuery]超出容器部分...
  8. fastReport 绑定DataBand数据源后还是打印出一条数据
  9. Netsuite Foreign Currency Revaluation 外币评估
  10. 【教程】InstallShield使用完全教程
  11. OSM获取城市路网数据及其矢量化
  12. 知乎热议最丑陋的数学公式:「四次方程求根」高票当选
  13. TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片
  14. eNSP路由器启动不了
  15. 关于网络连接里无虚拟网络适配器的解决办法
  16. github上比较好用的第三方
  17. python查重算法_用Python实现通过哈希算法检测图片重复的教程
  18. Android Studio 调试技巧大全
  19. 视频压缩技术及安卓中用法
  20. 程序员之间最丧心病狂的鄙视链——编程语言篇

热门文章

  1. RDS认证辅导,如何申请RDS认证,RDS认证的模块由哪些部分组成
  2. 产品读书《创京东:刘强东亲述创业之路》
  3. 南京银行行长增持背后:连续2个季度业绩下滑,不良贷款规模增至60亿元
  4. 一个简单的生产排程软件
  5. 哪些企业使用CEGBU低代码平台能获得最大信息化投资回报率
  6. XFS:协同区块链,助力电商发展
  7. 【PostgreSQL】GIN索引安装与使用 - 全模糊匹配/数组匹配,PG批量插入上万随机生成数据,随机生成字符串/数组
  8. 利用python批量爬取网页图片_使用python来批量抓取网站图片
  9. adxl345取出值怎么算角度_adxl345怎样通过想,x,y,z的输出计算出角度值
  10. 未来一周天气变化(最高温度和最低温度)(图表以及详细的注释)