日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lintcode:排颜色 II

發布時間:2025/1/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lintcode:排颜色 II 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

排顏色 II

給定一個有n個對象(包括k種不同的顏色,并按照1到k進行編號)的數組,將對象進行分類使相同顏色的對象相鄰,并按照1,2,...k的順序進行排序。

樣例

給出colors=[3, 2, 2, 1, 4],k=4, 你的代碼應該在原地操作使得數組變成[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

標記法,先統計各個顏色的次數,然后根據數組更改次數

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

只有三種顏色的排序?的時候,但是當有多個的時候判斷情況太多。

在九章看到兩個指針的方法

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;}}

?

??

理解不透,腦子太笨。

總結

以上是生活随笔為你收集整理的lintcode:排颜色 II的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。