leetcode刷題--基礎陣列--移動零(C)
阿新 • • 發佈:2018-12-14
- 給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。 示例: 輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0] 說明: 必須在原陣列上操作,不能拷貝額外的陣列。 儘量減少操作次數。
思想:這個和之前的從排序陣列中刪除重複項很類似,雖然從題目上看“刪除重複項”和“移動零”差別有點大,但是其中的忽略重複項和忽略重複零的思想是類似的,具體來說就是在一次遍歷的過程中,遇到“0”就直接跳過,非0元素就插入nums[j] 後(這邊用指標 j,記錄陣列中的非0元素個數)。最後將陣列剩餘元素都賦值為0。
// 時間複雜度O(n), 空間複雜度O(1) void moveZeroes(int* nums, int numsSize) { int temp = nums[0]; int j=0; for(int i=0; i<numsSize; i++){ if(nums[i] != 0) nums[j++] = nums[i]; } for(int i=j; i<numsSize; i++) nums[i] = 0; }