移動零283

指針

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

class Solution {
	public void moveZeroes(int[] nums) {
		if(nums==null) {
			return;
		}
		//第一次遍歷的時候,j指針記錄非0的個數,只要是非0的統統都賦給nums[j]
		int j = 0;
		for(int i=0;i<nums.length;++i) {
			if(nums[i]!=0) {
				nums[j++] = nums[i];
			}
		}
		//非0元素統計完了,剩下的都是0了
		//所以第二次遍歷把末尾的元素都賦爲0即可
		for(int i=j;i<nums.length;++i) {
			nums[i] = 0;
		}
	}
}

時間複雜度

時間複雜度:O(n)
空間複雜度:O(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章