1.給定一個數組 nums,編寫一個函數將全部 0 移動到數組的末尾,同時保持非零元素的相對順序。數組
示例: 輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0]
說明:函數
- 必須在原數組上操做,不能拷貝額外的數組。
- 儘可能減小操做次數。
2.解題思路
建立兩個指針i和j,第一次遍歷的時候指針j用來記錄當前有多少非0元素。即遍歷的時候每遇到一個非0元素就將其往數組左邊挪,第一次遍歷完後,j指針的下標就指向了最後一個非0元素下標。
第二次遍歷的時候,起始位置就從j開始到結束,將剩下的這段區域內的元素所有置爲0。動畫
參考地址:
動畫演示 283.移動零url
解題代碼:spa
/** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ var moveZeroes = function(nums) { let j = 0; /* 循環第一次記錄每個非0的元素;只要是非0的通通都賦給nums[j] */ for (var i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[j++] = nums[i]; } } //非0元素統計完了,剩下的都是0了 //因此第二次遍歷把末尾的元素都賦爲0 for (var i = j; i < nums.length; i++) { nums[i] = 0; } return nums };
解題代碼:.net
執行結果指針