荷兰国旗问题

荷兰国旗包含三种颜色:红、白、蓝。

有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列。它其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:小于切分元素、等于切分元素、大于切分元素,而该算法是将数组分成三个区间:等于红色、等于白色、等于蓝色。

1. 按颜色进行排序

75. Sort Colors (Medium)

Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

题目描述:只有 0/1/2 三种颜色。

项目源码

package order;/*** @Author Janson* @Date 2022/2/17 11:58* @Version 1.0*//*** 荷兰国旗问题* 荷兰国旗包含三种颜色:红、白、蓝。** 有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列。它* 其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:* 小于切分元素、等于切分元素、大于切分元素,* 而该算法是将数组分成三个区间:等于红色、等于白色、等于蓝色。* 1. 按颜色进行排序* 75. Sort Colors (Medium)** Leetcode / 力扣** Input: [2,0,2,1,1,0]* Output: [0,0,1,1,2,2]* 题目描述:只有 0/1/2 三种颜色。*/
public class Order4_sortColors {public static void main(String[] args) {int[] nums = new int[]{2,0,2,1,1,0};/*** 方法思路:*      双指针法进行排序,遍历数组,将值最大的交换在数组尾部位置*      将值最小的交换在开头位置,值居中的不做处理,继续遍历**/int left = -1,traver = 0,right = nums.length;while (traver < right){if (nums[traver] == 0){swap(nums,++left,traver++);}else if(nums[traver] == 2){swap(nums,--right,traver);}else {traver++;}}for (int num: nums) {System.out.print(num + " ");}}private static void swap(int[] nums,int traver,int right){int temp = 0;temp = nums[traver];nums[traver] = nums[right];nums[right] = temp;}
}

Leetcode 刷题 - 排序(day4)_颜色排序相关推荐

  1. LeetCode刷题(Python)——在排序数组中查找元素的第一个和最后一个位置

    题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值 ...

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

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

  3. ​LeetCode刷题实战81:搜索旋转排序数组 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  6. LeetCode刷题C++实录

    LeetCode刷题C++实录 1. 两数之和 121. 买卖股票的最佳时机 382. 链表随机节点 622. 设计循环队列 623. 在二叉树中增加一行 640. 求解方程 761. 特殊的二进制序 ...

  7. C#LeetCode刷题-排序

    排序篇 # 题名 刷题 通过率 难度 56 合并区间 31.2% 中等 57 插入区间 30.4% 困难 75 颜色分类 48.6% 中等 147 对链表进行插入排序 50.7% 中等 148 排序链 ...

  8. LeetCode刷题笔记-动态规划-day4

    文章目录 LeetCode刷题笔记-动态规划-day4 55. 跳跃游戏 1.题目 2.解题思路 3.代码 45. 跳跃游戏 II 1.题目 2.解题思路 3.代码 LeetCode刷题笔记-动态规划 ...

  9. php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...

    每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...

  10. LeetCode刷题Python实录

    使用Python的LeetCode刷题 前言 题目 1408. 数组中的字符串匹配 508. 出现次数最多的子树元素和 1089. 复写零 剑指 Offer 14- I. 剪绳子 1175. 质数排列 ...

最新文章

  1. 小虎计算器-技术支持
  2. VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT
  3. Hi3516A开发--安装交叉编译器
  4. 利用chunk重设大小攻击堆
  5. java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...
  6. 澎思科技新出行人再识别(ReID)算法,刷新三大数据集最高记录
  7. 1×1的卷积核在卷积层的作用----网络中的网络
  8. 荣耀手机动态修改imei信息
  9. Python实现简单p2p下载
  10. Python(基础)输出与输入
  11. 云计算数据中心运维管理要点
  12. Java练习题【新】
  13. linux文件名带星号,Linux安装之bash星号用法
  14. 百度网盘网页版倍速播放
  15. android 对话框 美化,Android修改Dialog样式
  16. FTP上传下载端口号
  17. ARMv8 Cortex-a 编程向导手册学习_2.ARMv8-A 寄存器
  18. java nanotime 重复_关于Java中System.currentTimeMillis和System.nanoTime的错误认识
  19. 打字时覆盖下一个字怎么办
  20. 【Python爬虫】爬取ppt素材

热门文章

  1. sqlite循环插入时使用stmt需要reset,否则会插入出错
  2. 自动驾驶相关功能名词和汽车名词解释
  3. 面试相关-转载-well,yzl——持续更新
  4. 冲刺计划sprint
  5. APS高级计划排程系统和生产排产系统
  6. 关于Linux运行steam的解决方案
  7. 对话惠普亚太区高管:绿色智慧的中国战略
  8. 名悦集团:深圳人买什么车好?
  9. 一文学会如何做电商数据分析(附运营分析指标框架)
  10. DES加密算法(框图流程详细分析)(C++实现)