1.題目
. - 力扣(LeetCode)
2.思路解析
這個題目的思路和“使用遞歸排序快速排序解決數組的排序問題”相同
class solution
{
public:void QuickSort(vector<int>& nums, int left, int right){if (left > right) return;int key = left;int pre = left;int cur = left + 1;while (cur <= right){if (nums[cur] < nums[key]){pre++;swap(nums[pre], nums[cur]);}cur++;}swap(nums[key], nums[pre]);key = pre;QuickSort(nums, left, key - 1);QuickSort(nums, key + 1, right);}
};
使用雙指針des和cur
指針des和cur向右遍歷
在非零區段中,des和cur一定是緊挨著的且cur一定比des快(cur在des右邊)
cur遇到零之后,des就不走,但是cur要接著走,此時cur指向零,des指向cur之前一個非0元素
在下一個循環中,cur不指向0,cur和des同時向前走一格,此時des指向零,cur不指向零
3.代碼
class Solution {
public:void moveZeroes(vector<int>& nums) {int des=-1;int cur=0;while(cur<nums.size()){if(nums[cur]!=0){des++;swap(nums[cur],nums[des]);}cur++;}}
};