颜色分类

题目描述:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/sort-colors/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:遍历数组

首先,声明2个参数,zeroIndex用来记录从左开始第一个不为红色的位置,初始值为0,twoIndex用来记录从右开始第一个不为蓝色的位置,初始值为nums.length - 1,然后遍历数组,遍历过程如下:

  • 如果当前的值等于2,则将当前位置的值和twoIndex位置的值进行交换,然后将twoIndex减一,然后进行下一轮处理;
  • 如果当前的值等于1,则继续判断下一个数字;
  • 如果当前的值等于0,则将当前位置的值和zeroIndex位置的值进行交换,然后将zeroIndex加一,然后进行下一轮处理。
  • 遍历结束的位置是twoIndex,因为twoIndex可能会左移,也就是不用遍历到数组的最后一位。
public class LeetCode_075 {
public static void sortColors(int[] nums) {
if (nums.length == 1) {
return;
}
// zeroIndex用来记录从左开始第一个不为红色的位置,twoIndex用来记录从右开始第一个不为蓝色的位置
int zeroIndex = 0, twoIndex = nums.length - 1;
for (int i = 0; i <= twoIndex; ) {
if (nums[i] == 2) {
// 如果当前的值等于2,则将当前位置的值和twoIndex位置的值进行交换
nums[i] = nums[twoIndex];
nums[twoIndex] = 2;
twoIndex--;
continue;
} else if (nums[i] == 1) {
i++;
} else if (nums[i] == 0) {
// 如果当前的值等于0,则将当前位置的值和zeroIndex位置的值进行交换
nums[i] = nums[zeroIndex];
nums[zeroIndex] = 0;
zeroIndex++;
i++;
}
}
} public static void main(String[] args) {
int[] nums = new int[]{2, 0, 2, 1, 1, 0};
sortColors(nums);
for (int num : nums) {
System.out.print(num + " ");
}
}
}

【每日寄语】 智者贵于乘时,时不可失。

LeetCode-075-颜色分类的更多相关文章

  1. LeetCode:颜色分类【75】

    LeetCode:颜色分类[75] 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 ...

  2. LeetCode 75. 颜色分类(Sort Colors) 30

    75. 颜色分类 75. Sort Colors 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中, ...

  3. Java实现 LeetCode 75 颜色分类

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

  4. Leetcode 75.颜色分类 By Python

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

  5. leetcode 75颜色分类

    两趟扫描,由于排序变量的特殊性,使用计数排序方法可以明显降低至O(n)time O(n) space 关于计数排序:https://mp.weixin.qq.com/s/WGqndkwLlzyVOHO ...

  6. leetcode 75. 颜色分类 JAVA

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

  7. Leetcode 75. 颜色分类

    题目链接 https://leetcode-cn.com/problems/sort-colors/description/ 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们 ...

  8. LeetCode 75. 颜色分类(Sort Colors)

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

  9. [LeetCode] 75. 颜色分类(荷兰国旗)

    class Solution { public: void sortColors(vector<int>& nums) { ,current=,end=nums.size()-; ...

  10. Java for LintCode 颜色分类

    给定一个包含红,白,蓝且长度为n的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红.白.蓝的顺序进行排序. 我们可以使用整数0,1和2分别代表红,白,蓝. 解题思路: Java for Leet ...

随机推荐

  1. QA(测试) 工作准则建议

    身为一个专业的 QA 当然需要有自己的测试原则,这些测试原则不仅可以帮助我们提高产品质量,对外还能体现出我们的专业性,从而让合作方后续还有意愿和我们合作. 1 测试前 1.1 需求评审 必须参与,有问 ...

  2. 微服务架构 | 10.1 使用 Sleuth 追踪服务调用链

    目录 前言 1. Sleuth 基础知识 1.1 Sleuth 原理 2. 在服务中使用 Sleuth 追踪 2.1 引入 pom.xml 依赖文件 2.2 查看日志信息 最后 前言 参考资料: &l ...

  3. WinForms 获取文件夹的基本信息

    1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Da ...

  4. C语言中数组长度不能用变量定义吗?

    C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数.没有申请的空间系统是不允许读写的.那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小 ...

  5. visual studio版本 宏

    转载请注明来源:https://www.cnblogs.com/hookjc/ MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) MSVC++ 11. ...

  6. Git Push 免输 用户名和密码

    前言 在大家使用github的过程中,一定会碰到这样一种情况,就是每次要push 和pull时总是要输入github的账号和密码,这样不仅浪费了大量的时间且降低了工作效率.在此背景下,本文在网上找了两 ...

  7. druid 数据源密码加密配置

    <!-- 数据源配置 --> <bean id="default" class="com.alibaba.druid.pool.DruidDataSou ...

  8. notepad++颜色属性解释

    Global Styles Indent guideline style  缩进参考线的颜色Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{}   js中的() ...

  9. MyBatis中使用log4j进行调试入门实例

    导入log4j.jar 设置日志级别等相关内容 文件内容(仅控制台有效): ### 设置###log4j.rootLogger = debug,stdout,D,E### 输出sql信息到控制抬 ## ...

  10. Spring Cloud Feign 如何使用对象参数

    概述 Spring Cloud Feign 用于微服务的封装,通过接口代理的实现方式让微服务调用变得简单,让微服务的使用上如同本地服务.但是它在传参方面不是很完美.在使用 Feign 代理 GET 请 ...