LeetCode OJ平台Sort Colors讨论主题算法
原题如下面,这意味着无序排列(由0,1,2组成)。一号通。组织成若干阵列0-几个1-几个2这样的序列。
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note:
You are not suppose to use the library's sort function for this problem.
Follow up:
A rather straight forward solution is a two-pass algorithm using counting sort.
First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's.
Could you come up with an one-pass algorithm using only constant space?
想了一段时间,未果,于是前往Discuss区域围观。
帖子网址点击打开链接
网友xianlei给出了一个精妙的方法。我理解之后,写出代码例如以下,由于有具体的凝视。就不啰嗦了。
在草纸上模拟一下,或者单步调试一下。就会明确这种方法的精妙之处!
!
public class Solution {
static int[] A = {1,0};
public static void sortColors(int[] A) {
int i = 0;//last index of array 0
int j = 0;//last index of array 1
int k = 0;//last index of array 2
for(int m = 0; m < A.length; m ++){
if(A[m] == 0){ // add 2 to the end of 2 array, replace the 1st 2 with 1, then insert 0 into 0 array,
A[k++] = 2;
A[j++] = 1;
A[i++] = 0;
}
else if(A[m] == 1){// add 2 to the end of 2 array, then insert 1, at the location of the 1st 2
A[k++] = 2;
A[j++] = 1;
}
else{//add 2 to the end of 2 array
A[k++] = 2;
}
}
}
public static void main(String args[]){
sortColors(A);
}
}
网友lchen77提供了还有一个非常好的思路,我的实现代码例如以下。
由于题目要求依照0,1,2的顺序来排序,所以遇到0。与前面的A[k++]交换。遇到2与A[j--]交换。
须要注意的是,A[k]要么等于0,要么等于1,所以0与A[k++]交换之后。i不用--,整个前面的序列是合法的。
可是2与A[j--]交换之后。i要--。由于从数组尾部随便一个数字与当前的2换完之后,必须还要验证。以防不合法。
并且,循环的终止条件是i,j相遇,相遇的时候,还要运行一次,即循环终止条件是i>j
public class Solution {
public static void sortColors(int[] A){
int k = 0; //index for 0 array;
int j = A.length-1;//index for 2 array
for(int i = 0; i <= j;i ++){
if(A[i] == 1){
continue;
}
else if(A[i] == 0){
A[i] = A[k];
A[k++] = 0;
}
else{
A[i] = A[j];
A[j--] = 2;
i --;
}
}
}
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
LeetCode OJ平台Sort Colors讨论主题算法的更多相关文章
- LeetCode OJ 75. Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- LeetCode OJ:Sort Colors(排序颜色)
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- 【LeetCode】75. Sort Colors (3 solutions)
Sort Colors Given an array with n objects colored red, white or blue, sort them so that objects of t ...
- 【一天一道LeetCode】#75. Sort Colors
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- 【LeetCode】75. Sort Colors 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 计数排序 双指针 日期 题目地址:https://l ...
- 【LeetCode】075. Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- leetcode笔记:Sort Colors
一. 题目描写叙述 Given an array with n objects colored red, white or blue, sort them so that objects of the ...
- LeetCode OJ:Sort List(排序链表)
Sort a linked list in O(n log n) time using constant space complexity. 题目要求在常数控件内以O(nlogn)的事件复杂度来排序链 ...
- 【leetcode】75. Sort Colors
题目如下: 解题思路:我的解题思路是遍历数组,遇到0删除该元素并插入到数组头部,遇到1则不处理,遇到2删除该元素并插入到数组尾部. 代码如下: class Solution(object): def ...
随机推荐
- [Angular2 Form] Reactive form: valueChanges, update data model only when form is valid
For each formBuild, formControl, formGroup they all have 'valueChanges' prop, which is an Observable ...
- php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结)
php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结) 一.总结 从外到内解决网站大流量高并发问题---从提交一个url开始(从用户按下搜索栏回车键开始) url最开始会到d ...
- gdb 调试多线程 神贴
gdb 调试多线程如果目标进程已经core dump了,那么 gdb -c core xxx xxx是对应的程序文件.如果目标进程还在运行,通常此时用于调试线程死锁的情况.有两种方法一是 gdb ...
- android的edittext设置输入限制,只能输入数字
EditText的属性里面已经封装好了相关的设置,上一篇文章里面也提到了,不熟悉的可以去查看上一篇EditText属性大全,这里着重讲输入限制的属性: android:digits="123 ...
- 【23.58%】【code forces 321E】Ciel and Gondolas
time limit per test4 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...
- USB 3.0规范中译本第9章 设备框架
本文为CoryXie原创译文,转载及有任何问题请联系cory.xie#gmail.com. 设备框架可以被分成三层: 最底层是总线接口层,传送和接收包. 中间层处理在总线接口和设备的各种端点之间路由数 ...
- oracle 复制表数据,复制表结构
1.不同用户之间的表数据复制 对于在一个数据库上的两个用户A和B,假如需要把A下表old的数据复制到B下的new,请使用权限足够的用户登入sqlplus:insert into B.new(selec ...
- JVM源码分析之System.currentTimeMillis及nanoTime原理详解
JDK7和JDK8下的System.nanoTime()输出完全不一样,而且差距还非常大,是不是两个版本里的实现不一样,之前我也没注意过这个细节,觉得非常奇怪,于是自己也在本地mac机器上马上测试了一 ...
- Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏
Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...
- XMPP之ios即时通讯客户端开发-配置XMPP基本信息之工程代码(五)
登录功能完成以后包含以下代码文件: AppDelegate.h AppDelegate.m LoginViewController.h LoginViewController.m LoginUser. ...