原题如下面,这意味着无序排列(由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.

click to show follow up.

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讨论主题算法的更多相关文章

  1. 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 ...

  2. LeetCode OJ:Sort Colors(排序颜色)

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  3. 【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 ...

  4. 【一天一道LeetCode】#75. Sort Colors

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  5. 【LeetCode】75. Sort Colors 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 计数排序 双指针 日期 题目地址:https://l ...

  6. 【LeetCode】075. Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  7. leetcode笔记:Sort Colors

    一. 题目描写叙述 Given an array with n objects colored red, white or blue, sort them so that objects of the ...

  8. LeetCode OJ:Sort List(排序链表)

    Sort a linked list in O(n log n) time using constant space complexity. 题目要求在常数控件内以O(nlogn)的事件复杂度来排序链 ...

  9. 【leetcode】75. Sort Colors

    题目如下: 解题思路:我的解题思路是遍历数组,遇到0删除该元素并插入到数组头部,遇到1则不处理,遇到2删除该元素并插入到数组尾部. 代码如下: class Solution(object): def ...

随机推荐

  1. [PReact] Handle Simple Routing with preact-router

    Some applications only need a very minimal routing solution. This lesson will cover a practical exam ...

  2. Linux与Windows间使用git

    Linux与Windows间使用git Linux上架设git服务器,windows可以使用git从Linux上拉取/上传数据 windows使用工具:Git for Windows Linux上的用 ...

  3. 【codeforces 742A】Arpa’s hard exam and Mehrdad’s naive cheat

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. React Native 开发环境安装和配置使用报错: -bash: react-native: command not found

    [React  Native 开发环境安装和配置:-bash: react-native: command not found 报错: 前提是安装homebrew,node.js ,npm ,watc ...

  5. 【a502】符号三角形问题

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 在一般情况下,符号三角形的第一行有n个符号.按照2个同号的下面是"+"号,2个异号的 ...

  6. Java 之 assert (断言)

    我们知道C/C++语言中有断言的功能(assert).在Java SE 1.4版本以后也增加了断言的特性. 断言是为了方便调试程序,并不是发布程序的组成部分.理解这一点是很关键的. 默认情况下,JVM ...

  7. Elasticsearch v5.4

    在Windows上安装Elasticsearch v5.4.2   前言 最近项目里为了加快后台系统的搜索速度,决定接入开源的搜索引擎,于是大家都在对比较常用的几个开源做技术调研,比如Lucene+盘 ...

  8. [Angular] Some performance tips

    The talk from here. 1. The lifecycle in Angular component: constructor vs ngOnInit: Constructor: onl ...

  9. iOS 日志自动上报

       您好,欢迎使用腾讯Bugly!腾讯Bugly是腾讯公司为移动开发者开放的服务之一. 针对移动应用,腾讯Bugly提供了专业的Crash(崩溃).Android ANR(application n ...

  10. Oracle数据库零散知识03

    21,存储过程,简化复杂操作,增加数据独立性,提高安全性,提高性能 与函数创建对比: create or replace function fun_01(v_01 in number) return ...