leetcode上第75號問題:sort colors
給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意: 不能使用**庫中的排序函式來解決這道題。
示例:
輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]思路
結合三路快排partition思路的應用,設定兩個索引,乙個從左往右滑動zero
,乙個從右往左滑動two
,遍歷nums
,當nums[i]
的值為1時,i++
;當nums[i]
的值為2時,two
的值先減1,而後交換nums[i]
與nums[two]
,此時在觀察nums[i]
的值;當nums[i]
的值為0時,zero++
,而後交換nums[i]
與nums[zero]
,i++
;當i = two
時,結束迴圈。
動畫演示
**
// 三路快速排序的思想
// 對整個陣列只遍歷了一遍
// 時間複雜度: o(n)
// 空間複雜度: o(1)
class solution else
if (nums[i] == 2)else}}
};複製**
歡迎關注 每天一算 Two Sum II
leetcode上第75號問題 two sum ii 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 示例 輸入 numbers 2,7,11,15 target ...
每天一算 Move Zeros
leetcode上第283號問題 move zeros 給定乙個陣列nums,寫乙個函式,將陣列中所有的0挪到陣列的末尾,維持其他所有非0元素的相對位置。舉例 nums 0,1,0,3,12 函式運 後結果為 1,3,12,0,0 思路 建立乙個臨時陣列nonzeroelements,遍歷nums,...
每天一演算法(生命遊戲)
說明 生命遊戲 game of life 為1970年由英國數學家j.h.conway所提出,某一細胞的鄰居包括上 下 左 右 左上 左下 右上與右下相鄰之細胞,遊戲規則如下 復活 如果某位置原無細胞存活,而該位置的鄰居為三個,則該位置將復活一細胞。解法 生命遊戲的規則可簡化為以下,並使用case比...