leetcode-----现在有一个包含n个物体的数组,其中物体颜色为颜色为红色、白色或蓝色,请对这个数组进行排序,让相同颜色的物体相邻,颜色的顺序为红色,白色,蓝色。

news/2024/5/19 22:17:18 标签: 算法, 数据结构, 快速排序, 排序算法, java

题目描述

现在有一个包含n个物体的数组,其中物体颜色为颜色为红色、白色或蓝色,请对这个数组进行排序,让相同颜色的物体相邻,颜色的顺序为红色,白色,蓝色。

我们用0,1,2分别代表颜色红,白,蓝

注意:

本题要求你不能使用排序库函数

扩展:

一个非常直接的解法是两步的计数排序的算法

首先:遍历一遍数组,记录0,1,2的数量,然后重写这个数组,先将0写入,再将1写入,再将2写入

你能给出一个只用一步,并且能在常数级空间复杂度解决这个问题的算法吗?

 public void sortColors(int[] A) {
       if(A==null || A.length==0){
           return;
       }
       int left=0; //左侧存放红色的下标
       int right=A.length-1; //右侧存放蓝色的下标
       for(int i=0;i<=right;i++){
           if(A[i]<1){//A[i]红色
              A[i] = A[left]; //A[left]不一定是红色
              A[left] = 0;//将当前红色A[i] 与 A[left]交换,此时A[left]是红色
              left++;
           }
           if(A[i]>1){//A[i]蓝色
               A[i] = A[right];
               A[right] = 2;//将当前的蓝色A[i] 与 A[right]交换
               right--;
               i--; //避免类似A[i-1]=白色,A[i]=红色 的情况
           }
       }
    }


http://www.niftyadmin.cn/n/1023988.html

相关文章

java nio详解_JAVA NIO深度解析

目录IO传输方式IO线程模型BIONIONIO、BIO对比假设将IO操作比做两个城市间输送人员。即人是我们需要输送的数据&#xff01;IO传输方式- 基于流以字节为最小单位传输数据此模式下相当于在两个城市间的人员输送是一个一个人的输送的。流式输送数据- 基于缓冲区以缓冲区为最小单位…

12、Java并发编程:阻塞队列

Java并发编程&#xff1a;阻塞队列 在前面几篇文章中&#xff0c;我们讨论了同步容器(Hashtable、Vector&#xff09;&#xff0c;也讨论了并发容器&#xff08;ConcurrentHashMap、CopyOnWriteArrayList&#xff09;&#xff0c;这些工具都为我们编写多线程程序提供了很大的方…

electronjs MySQL_Electron中使用sql.js操作SQLite数据库

一、关于sql.jssql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite C代码&#xff0c;将SQLite移植到Webassembly。 它使用存储在内存中的虚拟数据库文件&#xff0c;因此不会保留对数据库所做的更改。 但是&#xff0c;它允许您导入任何现有的sqlite文件…

JS权威指南读书笔记(三)

第七章 数组1 数组的实现是经过优化的&#xff0c;用数字索引来访问数组元素一般来说比访问常规的对象属性要快的多。2 数组直接量的语法允许有可选的结尾的逗号&#xff0c;故[ ; ; ]只有两个元素而非三个。3 调用构造函数创建数组a 调用时没有参数 > 空数组b 调用时有一个…

leetcode------删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次

题目描述 删除给出链表中的重复元素&#xff08;链表中元素从小到大有序&#xff09;&#xff0c;使链表中的所有元素都只出现一次 例如&#xff1a; 给出的链表为1->1->2,返回1->2. 给出的链表为1->1->2->3->3,返回1->2->3. public ListNode d…

Redis系统性介绍

Redis系统性介绍 作者&#xff1a;nosqlfan 虽然Redis已经很火了&#xff0c;相信还是有很多同学对Redis只是有所听闻或者了解并不全面&#xff0c;下面是一个比较系统的Redis介绍&#xff0c;对Redis的特性及各种数据类型及操作进行了介绍。是一个很不错的Redis入门教程。 1.…

leetcode-----给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。

题目描述 给出两个二叉树&#xff0c;请写出一个判断两个二叉树是否相等的函数。 判断两个二叉树相等的条件是&#xff1a;两个二叉树的结构相同&#xff0c;并且相同的节点上具有相同的值 public boolean isSameTree (TreeNode p, TreeNode q) {//使用递归if(pnull &&am…

HDU 1556 Color the ball

Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16486 Accepted Submission(s): 8203 Problem DescriptionN个气球排成一排&#xff0c;从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <…