颜色分类:给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。

     我们可以使用整数 0,1 和 2 分别代表红,白,蓝。

注意事项: 不能使用代码库中的排序函数来解决这个问题。 排序需要在原数组中进行。

样例 :给你数组 [1, 0, 1, 2], 需要将该数组原地排序为 [0, 1, 1, 2]

方法一:常规解决方案(1、迭代数组计算 0,1,2 出现的次数;2、然后依次用 0,1,2 出现的次数去覆盖数组)

 class Solution {
/**
* @param nums: A list of integer which is 0, 1 or 2
* @return: nothing
*/
public void sortColors(int[] nums) {
if(null == nums || nums.length <= 1) return;
int Num0 = 0, Num1 = 0, Num2 = 0;
for(int i = 0; i < nums.length; i++) {
switch(nums[i]) {
case 0:
Num0++;
break;
case 1:
Num1++;
break;
case 2:
Num2++;
break;
default:
return;
}
}
for(int i = 0; i < nums.length; i++) {
if(i < Num0) {
nums[i] = 0;
}else if(i >= Num0 && i < Num0+Num1) {
nums[i] = 1;
}else {
nums[i] = 2;
}
}
}
}

方法二:题目要求(仅使用常数级额外空间复杂度且只扫描遍历一遍数组的算法)

 public class Solution {
/**
* @param nums: A list of integer which is 0, 1 or 2
* @return: nothing
*/
public void sortColors(int[] nums) {
int i = 0,I = 0;
int r = nums.length-1;
int temp;
//System.out.printf("r=%d",r); for(i=0;i<nums.length-1&&i<r+1;){
if(nums[i]==0){
if(i==I){
i++;
}
else{
temp=nums[i];
nums[i]=nums[I];
nums[I]=temp;
}
I++;
}
else if(nums[i]==2){
temp=nums[i];
nums[i]=nums[r];
nums[r]=temp;
r--;
}
else{
i++;
}
}
}
}

LintCode——颜色分类的更多相关文章

  1. lintcode:颜色分类

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

  2. Java for LintCode 颜色分类

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

  3. 颜色分类(LintCode)

    颜色分类 给定一个包含红,白,蓝且长度为n的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红.白.蓝的顺序进行排序. 我们可以使用整数0,1和2分别代表红,白,蓝. 样例   注意 不能使用代码 ...

  4. (转!)利用Keras实现图像分类与颜色分类

    2018-07-19 全部谷歌渣翻加略微修改 大家将就的看哈 建议大佬们还是看看原文 点击收获原文 其中用到的示例文件 multi-output-classification 大家可以点击 下载 . ...

  5. Matplotlib:可视化颜色命名分类和映射颜色分类

    Matplotlib中支持的所有颜色分类 映射颜色分类

  6. LeetCode:颜色分类【75】

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

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

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

  8. Java实现 LeetCode 75 颜色分类

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

  9. JAVA swing中JPanel如何实现分组框的效果以及设置边框颜色 分类: Java Game 2014-08-16 12:21 198人阅读 评论(0) 收藏

    代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridLayout; import javax.sw ...

随机推荐

  1. Joinpoint继承体系-笔记

    Joinpoint继承层次图: 由上图可以知道的所有的接口的实现都在ReflectiveMethodInvocation这个类中.ConstructorInvocation接口只有一个方法,这个方法的 ...

  2. 1854. [SCOI2010]游戏【二分图】

    Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...

  3. Java并发编程--3.Lock

    Lock接口 它提供3个常用的锁 lock() : 获不到锁就就一直阻塞 trylock() :获不到锁就立刻放回 或者 定时的,轮询的获取锁 lockInterruptibly() : 获不到锁时阻 ...

  4. 使用Discuz!自带参数防御CC攻击以及原理

    CC攻击确实是很蛋疼的一种攻击方式,Discuz!的配置文件中已经有了一个自带的减缓CC攻击的参数,在配置文件config.inc.php中: $attackevasive = 0;  // 论坛防御 ...

  5. 解析Array.prototype.slice.call(arguments)

    在es5标准中,我们经常需要把arguments对象转换成真正的数组 // 你可以这样写 var arr = Array.prototype.slice.call(arguments) // 你还可以 ...

  6. layui弹出层之应用实例讲解

    从酒店管理系统到智能门锁及其现在的资源共享平台,layui框架,我们团队用的比较多的就是这个layui弹出层. layui弹出层,除了页面iframe层我们比较常用还有就是表单校验和其他相关的友好提示 ...

  7. 【LeetCode371】 Sum of Two Integers

    题目描述: 解题思路: 此题是要在不用操作符+和-的情况下,求两个整数的和.既然不能用内置的加减法,那就只能用位运算(&, |, ~, ^). (1)异或(xor):异或的数学符号为“⊕”,计 ...

  8. iview 或 element-ui table 列表表头加样式

    table 表头有时候需要加一些小样式比如 必填项 这是我项目中遇到的需求===  比例,产品, 部门为必填项,这个时候就需要在表头加个红色小星星. 首先在table中绑定:header-cell-c ...

  9. K8S学习心得 == 安装虚拟路由器RouterOS

    使用RouterOS, 搭建虚拟路由器,并且配置多个网关互通.配置步骤如下.   基础配置 1. RouterOS 服务器,设置如下             2. VM 不同网段的设置 == 192. ...

  10. 可用的ntp服务器

    操作系统中带的:time.windows.com 和 time.nist.gov  网上查到一个公共的:cn.ntp.org.cn 以上三个连接多次才成功一次,速度不好. 在移动电视盒子上有一个配置: ...