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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Leetcode--75. 颜色分类

發布時間:2024/7/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--75. 颜色分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個包含紅色、白色和藍色,一共?n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。

此題中,我們使用整數 0、?1 和 2 分別表示紅色、白色和藍色。

注意:
不能使用代碼庫中的排序函數來解決這道題。

示例:

輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
進階:

一個直觀的解決方案是使用計數排序的兩趟掃描算法。
首先,迭代計算出0、1 和 2 元素的個數,然后按照0、1、2的排序,重寫當前數組。
你能想出一個僅使用常數空間的一趟掃描算法嗎?

方法一:時間復雜度:o(n^2)

一個排序算法就可以


public class Solution75 {
?? ? public static void sortColors(int[] nums) {
?? ? ? ? ? ?int i,j,t;
?? ? ? ? ? ?int n = nums.length;
?? ? ? ? ? ?for(i=0;i<n-1;i++)
?? ? ? ? ? ?{
?? ? ? ? ? ??? ?for(j=0;j<n-1-i;j++)
?? ? ? ? ? ??? ?{
?? ? ? ? ? ??? ??? ?if(nums[j]>nums[j+1])
?? ? ? ? ? ??? ??? ?{
?? ? ? ? ? ??? ??? ??? ?t = nums[j];
?? ? ? ? ? ??? ??? ??? ?nums[j] = nums[j+1];
?? ? ? ? ? ??? ??? ??? ?nums[j+1] = t;
?? ? ? ? ? ??? ??? ?}
?? ? ? ? ? ??? ?}
?? ? ? ? ? ?}
?? ? ? ? ? ?for(i=0;i<n;i++)
?? ? ? ? ? ?{
?? ? ? ? ? ??? ?System.out.println(nums[i]);
?? ? ? ? ? ?}
?? ? ? ?}
?? ? public static void main(String[] args)
?? ? {
?? ??? ? int[] nums = {2,0,2,1,1,0};
?? ??? ? sortColors(nums);
?? ? }
}
方法二:三指針法??時間復雜度:o(n)

一個指針從頭遍歷,一個指針判斷0的個數,記錄0的右邊界,一個指針判斷2的個數,記錄2的左邊界

當nums[i]的值為0,1是,都會i++,而值為2時,無此操作。

原因是后面位置上可能本來也是2,會換到前面,那就需要把這個2繼續向后換

而值為0時他是相當于交換自己,所以無此考慮,可以執行i++

值為1時,1本來也要放在中間,也無需考慮
public class Solution75 {
?? ? public static void sortColors(int[] nums) {
?? ??? ? int flag1,flag3;
?? ??? ? int i,t;
?? ??? ? int n = nums.length;
?? ??? ? flag1 = 0;
?? ??? ? flag3 = n-1;
?? ??? ? for(i=0;i<n;)
?? ??? ? {
?? ??? ??? ? if(i>flag3||i<flag1)
?? ??? ??? ? {
?? ??? ??? ??? ? break;
?? ??? ??? ? }
?? ??? ??? ??
?? ??? ??? ? if(nums[i]==0)
?? ??? ??? ? {
?? ??? ??? ??? ? t = nums[i];
?? ??? ??? ??? ? nums[i] = nums[flag1];
?? ??? ??? ??? ? nums[flag1] = t;
?? ??? ??? ??? ? flag1++;
?? ??? ??? ??? ? i++;
?? ??? ??? ? }
?? ??? ??? ? else if(nums[i]==2)
?? ??? ??? ? {
?? ??? ??? ??? ? t = nums[i];
?? ??? ??? ??? ? nums[i] = nums[flag3];
?? ??? ??? ??? ? nums[flag3] = t;
?? ??? ??? ??? ? flag3--;
?? ??? ??? ? }
?? ??? ??? ? else
?? ??? ??? ? {
?? ??? ??? ??? ? i++;
?? ??? ??? ? }
?? ??? ? }
?? ??? ? for(i=0;i<n;i++)
?? ??? ? {
?? ??? ??? ? System.out.println(nums[i]);
?? ??? ? }
?? ? ? ?}
?? ? public static void main(String[] args)
?? ? {
?? ??? ? int[] nums = {2,0,2,1,1,0};
?? ??? ? sortColors(nums);
?? ? }
}
?

總結

以上是生活随笔為你收集整理的Leetcode--75. 颜色分类的全部內容,希望文章能夠幫你解決所遇到的問題。

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