lintcode:颜色分类
颜色分类
给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。
我们可以使用整数 0,1 和 2 分别代表红,白,蓝。
样例
给你数组 [1, 0, 1, 2], 需要将该数组原地排序为 [0, 1, 1, 2]
解题
暴力:两次快排 、扫描数组,记录0 1 2 的个数,更新数组
下面是一次快排 + 线性查找
对于数组 A,两个指针 low high
low指向 0的都跳过,结束的时候指向: 1或 2
high指向2的都跳过,结束的时候指向 :0 或 1
当是(1 ,0)时候,交换 low++ 使得0归位
当是(2,0)时候,交换high-- 使得 2归位
当是(2,1)时候,交换high-- 是的2归位
当时(1,1)时候,就比较复杂了
先左找,找到第一个0 和左1互换 low++
找不到0的时候从右1开始右找,找到第一个2的时候,和右1互换 high--
当左找不到2的时候,说明low high之间全是 1 结束
时间复杂度O(N)
class Solution {
/**
* @param nums: A list of integer which is 0, 1 or 2
* @return: nothing
*/
public void sortColors(int[] A) {
// write your code here
if(A == null)
return;
int len = A.length;
int low = 0;
int high = len - 1;
while(low < high){
while(low <= high && A[low] == 0) low++;
while(low <= high && A[high] ==2) high--;
if(low < high ){
if(A[low] == 1 && A[high] ==0){
A[low] = 0;
A[high] = 1;
low++;
}else if(A[low]==2 && A[high] ==0){
A[low] =0;
A[high] =2;
low++;
high--;
}else if(A[low]==2 && A[high] ==1){
A[low] =1;
A[high] =2;
high--;
}else if(A[low] == A[high] && A[low] == 1){
// 左开始找0
int tmp0 = low + 1;
while(tmp0 <= high && A[tmp0] != 0) tmp0++;
// 找到了 0 和左1交换
if(tmp0 <= high && A[tmp0]==0){
A[low] = 0;
A[tmp0] = 1;
low++;
}else { //没找到 0
// 右开始找2
int tmp2 = high - 1;
while(tmp2 >= low && A[tmp2] != 2) tmp2--;
// 找到 2 和右 1 交换
if(tmp2 >=low && A[tmp2] == 2){
A[high] = 2;
A[tmp2] = 1;
high--;
}else{//没找到 0 也没找到 2 说明全是 1 结束
return;
}
}
}
}
}
}
}
lintcode:颜色分类的更多相关文章
- LintCode——颜色分类
颜色分类:给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红.白.蓝的顺序进行排序. 我们可以使用整数 0,1 和 2 分别代表红,白,蓝. 注意事项: 不能 ...
- Java for LintCode 颜色分类
给定一个包含红,白,蓝且长度为n的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红.白.蓝的顺序进行排序. 我们可以使用整数0,1和2分别代表红,白,蓝. 解题思路: Java for Leet ...
- 颜色分类(LintCode)
颜色分类 给定一个包含红,白,蓝且长度为n的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红.白.蓝的顺序进行排序. 我们可以使用整数0,1和2分别代表红,白,蓝. 样例 注意 不能使用代码 ...
- (转!)利用Keras实现图像分类与颜色分类
2018-07-19 全部谷歌渣翻加略微修改 大家将就的看哈 建议大佬们还是看看原文 点击收获原文 其中用到的示例文件 multi-output-classification 大家可以点击 下载 . ...
- Matplotlib:可视化颜色命名分类和映射颜色分类
Matplotlib中支持的所有颜色分类 映射颜色分类
- LeetCode:颜色分类【75】
LeetCode:颜色分类[75] 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 ...
- LeetCode 75. 颜色分类(Sort Colors) 30
75. 颜色分类 75. Sort Colors 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中, ...
- Java实现 LeetCode 75 颜色分类
75. 颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红 ...
- 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 ...
随机推荐
- C#类型的转换:Converter<TInput, TOutput> 委托的使用
Converter<TInput, TOutput> 委托 表示将对象从一种类型转换为另一种类型的方法. 此委托由 Array 类的 ConvertAll<TInput, TOutp ...
- ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构
APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ...
- RSA和DES------加密和解密类
public class CryptogramUtil { //******************************************************************** ...
- 【分享】生成带数据的Insert语句工具(源码)
这个工具用于导出带数据的Insert语句,方便在不同版本的数据库上导出数据.有人说sql server 2008自带导出带数据的Insert语句(连接)但是我的数据库版本没有这个选项,无奈之下自己简单 ...
- 52.ISE中的PLL时钟输入
在manaul mode中选择PLL PLL的输入时钟可以是全局时钟,也可以是普通IO引脚. 1.PLL的输入时钟是全局时钟的情况. pll_xx pll_xx ( .clkin ( clkin ), ...
- Linux C 文件与目录4 将缓冲区数据写入磁盘
将缓冲区数据写入磁盘 所谓缓冲区,是Linux系统对文件的一种处理方式.在对文件进行写操作时,并没有立即把数据写入到磁盘,而是把数据写入到缓冲区.如果需要把数据立即写入到磁盘,可以使用sync函数.用 ...
- 结队开发项目——七巧板NABC需求分析
NABC需求分析 我们团队项目为七巧板取了个洋气的名字叫7-magic. 怀念过去,把握现在,展望未来:立足经典,勇于创新,开创一个七巧板的新时代. 特点:可以保存图片或上传至微信平台 N ...
- Careercup - Google面试题 - 5634470967246848
2014-05-06 07:11 题目链接 原题: Find a shortest path ,) to (N,N), assume is destination, use memorization ...
- 关于myeclipse代码提示的一些问题
默认是 .xxx 输入点提示,要写注释 @xxx的时候怎么输入@后面有代码提示呢? Auto activation delay 是代码提示出现的速度 下面一行是出现代码提示的条件 我们在.后面加 ...
- 【python】编码规范(转载)
转自:http://www.cnblogs.com/itech/archive/2012/01/06/2314454.html 1 编码 >>所有的 Python 脚本文件都应在文件头标上 ...