力扣 283.移動0 雙指標
阿新 • • 發佈:2022-04-05
283. 移動零
給定一個數組 nums
,編寫一個函式將所有 0
移動到陣列的末尾,同時保持非零元素的相對順序。
請注意 ,必須在不復制陣列的情況下原地對陣列進行操作。
示例 1:
輸入: nums = [0,1,0,3,12] 輸出: [1,3,12,0,0]
示例 2:
輸入: nums = [0] 輸出: [0]
題解
在原表上修改,使用兩個指標,l r
,l
指向當前更新的位置,r
往前搜尋;
- 如果
r
上的元素=0,則r向右繼續移動 - 如果
r
上元素!=0,則需要更新,將此元素與l
位置元素交換,使用swap
,並且l
向右移動,為下一次賦值做準備
被更新過的位置(l
左邊)儲存非0元素,r
在向右搜尋,判斷此位置元素是否需要儲存
檢視程式碼
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int l=0,r=0,len=nums.size();
while(r<len){
if(nums[r]!=0){
swap(nums[l++],nums[r]);
}
r++;
}
l++;
}
};