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 ...
随机推荐
- Xcode真机调试错误之"Please valify your...clock not set"
乍一看错误信息是证书过期,其实是描述证书错乱了. Xcode->Preferences->Account 将选中其中一个描述文件 show in finder,将里面的全都删除.
- 【热门收藏】iOS开发人员必看的精品资料(100个)——下载目录
iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大好.我们整理了51CTO下载中心100份热门的ios开发资料,做了 ...
- 二、verilogHDL行为描述建模
1.综合器: 能把行为级的verilog模块自动转换为门级结构的工具叫做综合器(synthsis tool) 2.verilog网表(verilog netlist): 电路结构可以用门级verilo ...
- oracle11g创建数据库最后一步确定时弹出无法创建目录
总的说是Windows7的权限问题 Windows7 dos命令下输入dbca创建数据库,因为权限问题,数据库将无法完成.所以还是在开始程序中打开dbca创建数据库比较好. Windows7 dos以 ...
- C Primer Plus学习笔记
1.汇编语言是特地的Cpu设计所采用的一组内部指令的助记符,不同的Cpu类型使用不同的Cpu C给予你更多的自由,也让你承担更多的风险 自由的代价是永远的警惕 2.目标代码文件.可执行文件和库 3.可 ...
- Machine Learning 学习笔记 (1) —— 线性回归与逻辑回归
本系列文章允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 梯度下降法 (Gradien ...
- Mac下安装Tomcat及配置
今天介绍Mac下Tomcat的安装及配置: 1.在搜索引擎(如:必应或百度)中搜索“Tomcat”,第一条搜索结果就是Tomcat官方地址: 2.在左侧选择“Tomcat8”或“Tomcat9”,我这 ...
- 【Binary Tree Post order Traversal】cpp
题目: Given a binary tree, return the postorder traversal of its nodes' values. For example:Given bina ...
- 重读《Struts In Action》
Figure 1.1. The Java Servlet API exposes the HTTP client/server protocol to the Java platform. S ...
- js读取屏幕长宽
网页可见区域宽 document.body.clientWidth 网页可见区域高 document.body.clientHeight 网页可见区域宽(包括边线的宽) document.body.o ...