leetcode 75題【優美的寫法】
給定一個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意:
不能使用程式碼庫中的排序函式來解決這道題。
示例:
輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
進階:
一個直觀的解決方案是使用計數排序的兩趟掃描演算法。
首先,迭代計算出0、1 和 2 元素的個數,然後按照0、1、2的排序,重寫當前陣列。
你能想出一個僅使用常數空間的一趟掃描演算法嗎?
解題思路
定義三個指標i,j,k分別代表0,1,2的位置,然後遍歷陣列。當是0時,則i,j,k全部前進一步,並把i,j,k對應位置的數分別設定為0,1,2,因為陣列被要求按照從大到小的位置排列的。同理,當是1時,則j,k分別前進一步,設定為1,2。當是2時,則只有k前進一步,設定為2。
注意,設定對應的數時,需要按照k->j->i的順序,以達到讓已經設定好的數字向右移動的目的。具體程式碼如下。
java版本的
class Solution {
public void sortColors(int[] nums) {
int i = 0;
int j = 0;
int k = 0;
for(int m = 0;m < nums.length;m++){
if(nums[m]==0){
nums[k++] = 2;
nums[j++] = 1;
nums[i++] = 0;
}else if(nums[m]==1){
nums[k++] = 2;
nums[j++] = 1;
}else{
nums[k++] = 2;
}
}
}
}
相關文章
- 75. Sort Colors(Leetcode每日一題-2020.10.07)LeetCode每日一題
- Android架構系列-如何優美的寫IntentAndroid架構Intent
- 類的優雅寫法
- ImageLoader的優化寫法優化
- 用runtime優化tableView寫法優化View
- 優美的曲調離不開樂譜編寫軟體:Crescendo MastersAST
- 滑動視窗法——Leetcode例題LeetCode
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- 不使用@Value的優雅寫法
- leetcode 題解:python3@ 官方題解_暴力法_雙指標法LeetCodePython指標
- 2024-03-08 leetcode寫題記錄LeetCode
- 2024-03-15 leetcode寫題記錄LeetCode
- 2024-03-14 leetcode寫題記錄LeetCode
- leetcode 刷題之深度優先搜尋LeetCode
- leetcode 11 題解:python3@ 官方題解_暴力法_雙指標法LeetCodePython指標
- 『你寫的Promise, 是完美的嗎?』Promise
- 如何設計出優美的Web API?WebAPI
- PyTorch最佳實踐,怎樣才能寫出一手風格優美的程式碼PyTorch
- vscode刷leetcode無法登入的問題VSCodeLeetCode
- 【LeetCode動態規劃#06】分割等和子集(01揹包問題一維寫法實戰)LeetCode動態規劃
- async/await 如何優美的處理異常?AI
- JavaScript複雜判斷的更優雅寫法JavaScript
- JavaScript 複雜判斷的更優雅寫法JavaScript
- 48 條高效率的 PHP 優化寫法PHP優化
- leetcode刷題之1160拼寫單詞 java題解(超詳細)LeetCodeJava
- LeetCode每日一題: 轉換成小寫字母(No.709)LeetCode每日一題
- 寫不出來的深度優先搜尋----leetcode113 路徑總和LeetCode
- leetcode 解題 5. 最長迴文子串 python@ 官解,暴力法,動態法,manacher 法LeetCodePython
- 使用Python完成一套優美的中秋節程式碼Python
- LeetCode問題LeetCode
- Mysql資料庫的join演算法介紹,優美的執行優化MySql資料庫演算法優化
- 藍橋杯-外賣店優先順序(簡單寫法)
- shell if 寫法
- css寫法CSS
- 編寫一個非常精美的Flutter Todo-List專案Flutter
- 一個強悍而優美的Android視訊播放器Android播放器
- LeetCode題解第122題LeetCode
- 專題《一》mysql優化 ---------主從複製,讀寫MySql優化