指針
我們創建兩個指針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)