這是leetcode第283題數組
Given an array
nums
, write a function to move all0
's to the end of it while maintaining the relative order of the non-zero elements.
For example, givennums = [0, 1, 0, 3, 12]
, after calling your function,nums
should be[1, 3, 12, 0, 0]
.code
題目意思,就是把數組中的0都移動到數組的末尾,在保持其餘元素相對順序不變的狀況下。element
第一次遍歷,把不等於0
的元素保存到另一個數組中。
第二次遍歷,先把已保存不等於0
的元素依次賦值到nums
,而後把nums
剩下的元素空位都賦值0
leetcode
public class Solution { public void moveZeroes(int[] nums) { ArrayList<Integer> nonZeroNumList = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nonZeroNumList.add(nums[i]); } } for (int i = 0; i < nonZeroNumList.size(); i++) { nums[i] = nonZeroNumList.get(i); } for (int i = nonZeroNumList.size(); i < nums.length; i++) { nums[i] = 0; } } }
遍歷過程有2個下標位偏移標記,分別是i
和j
。
i
表明對於nums
當前元素的偏移標記;
j
表明遍歷過程當中,下一個不等於0
的元素,應該存放在nums
位置的偏移標記;get
public class Solution { public void moveZeroes(int[] nums) { for (int i = 0, j = 0; i < nums.length; i++) { if (nums[i] != 0) { if (i != j) { nums[j] = nums[i]; nums[i] = 0; } j++; } } } }