[Algo] 11. Rainbow Sort
Posted xuanlu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Algo] 11. Rainbow Sort相关的知识,希望对你有一定的参考价值。
Given an array of balls, where the color of the balls can only be Red, Green or Blue, sort the balls such that all the Red balls are grouped on the left side, all the Green balls are grouped in the middle and all the Blue balls are grouped on the right side. (Red is denoted by -1, Green is denoted by 0, and Blue is denoted by 1).
Examples
- {0} is sorted to {0}
- {1, 0} is sorted to {0, 1}
- {1, 0, 1, -1, 0} is sorted to {-1, 0, 0, 1, 1}
Assumptions
- The input array is not null.
Corner Cases
- What if the input array is of length zero? In this case, we should not do anything as well.
public class Solution { public int[] rainbowSort(int[] array) { // Write your solution here if (array == null || array.length == 0) { return array; } int neg = 0; int pos = array.length - 1; int zero = 0; while (zero <= pos) { if (array[zero] == -1) { swap(array, zero++, neg++); } else if (array[zero] == 0) { zero++; } else { swap(array, zero, pos--); } } return array; } private void swap (int[] arr, int a, int b) { int tmp = arr[a]; arr[a] = arr[b]; arr[b] = tmp; } }
以上是关于[Algo] 11. Rainbow Sort的主要内容,如果未能解决你的问题,请参考以下文章
Dapper学习 - Dapper.Rainbow - Read
Dapper学习 - Dapper.Rainbow - Update