close

問題描述


來源:LeetCode第75題

難度:中等

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

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

示例 1:

輸入:nums = [2,0,2,1,1,0]

輸出:[0,0,1,1,2,2]

示例 2:

輸入:nums = [2,0,1]

輸出:[0,1,2]

示例 3:

輸入:nums = [0]

輸出:[0]

示例 4:

輸入:nums = [1]

輸出:[1]

提示:

n == nums.length

1 <= n <= 300

nums[i] 為 0、1 或 2


三指針解決


數組中只有3種數字0,1,2。我們只需要把0往前面移,3往後面移即可。難度不是很大,我們以示例一為例來看個視頻


再來看下代碼

//三指針publicvoidsortColors(int[]nums){//0的右邊界intleft=0;//2的左邊界intright=nums.length-1;//指向當前數字intindex=0;while(index<=right){if(nums[index]==0){//如果是0,就往前面移swap(nums,left++,index++);}elseif(nums[index]==1){index++;}elseif(nums[index]==2){//如果是2就往後面移swap(nums,right--,index);}}}//交換數組中的兩個數字privatevoidswap(int[]nums,inti,intj){inttmp=nums[i];nums[i]=nums[j];nums[j]=tmp;}

●615,雙指針解兩數相加

●613,雙指針解三數之和

●597,雙指針解驗證回文字符串 Ⅱ

●539,雙指針解刪除有序數組中的重複項

截止到目前我已經寫了600多道算法題了,為了方便大家閱讀,我把部分算法題整理成了pdf文檔,目前有1000多頁,大家可以在下面公眾號「數據結構和算法」中回復關鍵字「pdf」即可獲取下載鏈接。

想學習算法,還可以長按下面二維碼加我微信,我給你拉到算法學習群,在工作中或者學習中遇到不會的問題都可以在群里討論。

你點的每個贊,我都認真當成了喜歡
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()