LeetCode 75 顏色分類
阿新 • • 發佈:2020-10-07
LeetCode 75 顏色分類
問題描述:
給定一個包含紅色、白色和藍色,一共n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、1 和 2 分別表示紅色、白色和藍色。
注意:
- 不能使用程式碼庫中的排序函式來解決這道題。
三指標
- lastRed指向左側連續的0中最後一個0的位置
- firstBlue指向右側連續的2中第一個2的位置
- curr從lastRed+1開始遍歷每個元素,並將0,2新增到左右兩側
執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的使用者
記憶體消耗:37.4 MB, 在所有 Java 提交中擊敗了46.38%的使用者
class Solution { public void sortColors(int[] nums) { if(nums==null || nums.length==0) { return; } //三指標 int lastRed = -1, firstBlue = nums.length; while(lastRed<firstBlue-1 && nums[lastRed+1]==0) { lastRed++; } while(firstBlue>lastRed+1 && nums[firstBlue-1]==2) { firstBlue--; } int curr = lastRed+1; while(lastRed<firstBlue && curr<firstBlue) { if(nums[curr]==0) { //交換lastRed+1與curr swap(nums, lastRed+1, curr); lastRed++; } if(nums[curr]==2) { //交換firstBlue-1與curr swap(nums, firstBlue-1, curr); firstBlue--; } if(curr==lastRed || curr==firstBlue || nums[curr]==1) { curr++; } } return; } public void swap(int[] nums, int idx1, int idx2) { if(nums==null || nums.length==0 || idx1<0 || idx1>=nums.length || idx2<0 || idx2>=nums.length) { return; } //交換idx1、idx2 int tmp = nums[idx1]; nums[idx1] = nums[idx2]; nums[idx2] = tmp; return; } }