lintcode:排颜色 II
生活随笔
收集整理的這篇文章主要介紹了
lintcode:排颜色 II
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
排顏色 II
給定一個有n個對象(包括k種不同的顏色,并按照1到k進行編號)的數(shù)組,將對象進行分類使相同顏色的對象相鄰,并按照1,2,...k的順序進行排序。
樣例
給出colors=[3, 2, 2, 1, 4],k=4, 你的代碼應(yīng)該在原地操作使得數(shù)組變成[1, 2, 2, 3, 4]
解題
直接快排
class Solution {/*** @param colors: A list of integer* @param k: An integer* @return: nothing*/public void sortColors2(int[] colors, int k) {// write your code heresort(colors,0,colors.length - 1);}public void sort(int[] A,int low,int high){if(low >= high)return ;int i = low;int j = high;int tmp = A[low];while(i<j){while(i<j && A[j]>tmp) j--;if(i<j){A[i] = A[j];i++;}while(i<j && A[i]<= tmp) i++;if(i<j){A[j] = A[i];j--;}}A[i] = tmp;sort(A,low,i-1);sort(A,i+1,high);} } Java Code標(biāo)記法,先統(tǒng)計各個顏色的次數(shù),然后根據(jù)數(shù)組更改次數(shù)
class Solution {/*** @param colors: A list of integer* @param k: An integer* @return: nothing*/public void sortColors2(int[] colors, int k) {// write your code hereint[] flag = new int[k+1];for(int i = 0;i<colors.length;i++){flag[colors[i]]++;}int c = 1;for(int i = 0;i<colors.length;i++){while(flag[c]==0){// 顏色可能為0 的比較多c++;}colors[i] = c;flag[c]--;}}} View Code只有三種顏色的排序?的時候,但是當(dāng)有多個的時候判斷情況太多。
在九章看到兩個指針的方法
class Solution {/*** @param colors: A list of integer* @param k: An integer* @return: nothing*/public void sortColors2(int[] colors, int k) {int count = 0;int start = 0;int end = colors.length-1;while (count < k) {int min = Integer.MAX_VALUE;int max = Integer.MIN_VALUE;for (int i = start; i <= end; i++) {min = Math.min(min, colors[i]);max = Math.max(max, colors[i]);}int left = start;int right = end;int cur = left;while(cur <= right) {if (colors[cur] == min) {swap(left, cur, colors);cur++;left++;} else if (colors[cur] > min && colors[cur] < max) {cur++;} else {int tmp = colors[cur];swap(cur, right, colors);right--;}}count += 2;start = left;end = right;}}void swap(int left, int right, int[] colors) {int tmp = colors[left];colors[left] = colors[right];colors[right] = tmp;}}?
??
理解不透,腦子太笨。
總結(jié)
以上是生活随笔為你收集整理的lintcode:排颜色 II的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android学习笔记系列四2 —— A
- 下一篇: Android官方开发文档Trainin