【leetcode】283. 移動零

1.給定一個數組 nums,編寫一個函數將全部 0 移動到數組的末尾,同時保持非零元素的相對順序。數組

示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]

說明:函數

  • 必須在原數組上操做,不能拷貝額外的數組。
  • 儘可能減小操做次數。

2.解題思路
建立兩個指針i和j,第一次遍歷的時候指針j用來記錄當前有多少非0元素。即遍歷的時候每遇到一個非0元素就將其往數組左邊挪,第一次遍歷完後,j指針的下標就指向了最後一個非0元素下標。
第二次遍歷的時候,起始位置就從j開始到結束,將剩下的這段區域內的元素所有置爲0。動畫

image
參考地址:動畫演示 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

51.png

執行結果指針

相關文章
相關標籤/搜索