颜色分类—leetcode75
生活随笔
收集整理的這篇文章主要介紹了
颜色分类—leetcode75
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個包含紅色、白色和藍色,一共?n?個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、?1 和 2 分別表示紅色、白色和藍色。
注意:
不能使用代碼庫中的排序函數來解決這道題。
示例:
輸入: [2,0,2,1,1,0] 輸出: [0,0,1,1,2,2]進階:
- 一個直觀的解決方案是使用計數排序的兩趟掃描算法。
首先,迭代計算出0、1 和 2 元素的個數,然后按照0、1、2的排序,重寫當前數組。 - 你能想出一個僅使用常數空間的一趟掃描算法嗎?
?
思路:這道題可以有很多解法,計數法,還有大不了再開一塊空間初始化為全1,再依此放0,2就行了唄,所以題目有了要求,要求一趟掃描,于是雙指針掃描便來了,其實也很簡單,就是掃描如果當前nums[cur]是0的話就交換掉left位置本該為0的值,left++;2也類似,right--就行?,但是要注意的是如果nums[cur]==0,而且cur==left就說明left位置已經是0了,這時候不需要交換,cur++,right++,否則會出問題哦~
class Solution { public:void sortColors(vector<int>& nums) {int n = nums.size();int left = 0;int right = n-1;int cur = 0;while(cur<=right){if(nums[cur]==0 && cur==left){cur++; left++;}else if(nums[cur]==0){swap(nums[cur],nums[left++]);}else if(nums[cur]==2){swap(nums[cur],nums[right--]);}else{cur++;}}return;} };?
總結
以上是生活随笔為你收集整理的颜色分类—leetcode75的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编辑距离—leetcode72
- 下一篇: 子集—leetcode78