【LeetCode】移動零問題
阿新 • • 發佈:2018-11-28
給定一個數組 nums
,編寫一個函式將所有 0
移動到陣列的末尾,同時保持非零元素的相對順序。
示例:
輸入:[0,1,0,3,12]
輸出:[1,3,12,0,0]
說明:
- 必須在原陣列上操作,不能拷貝額外的陣列。
- 儘量減少操作次數。
class Solution { public void moveZeroes(int[] nums) { int lastindex = nums.length-1; int moveindex = nums.length-1; int key=0; while(moveindex>=0) { if(nums[moveindex]==0) { key=lastindex-moveindex; for(int i=0;i<key;i++) { nums[moveindex + i] = nums[moveindex + i + 1]; } nums[lastindex]=0; lastindex--; } moveindex--; } } } public class Main { public static void main(String[] args) { int [] nums = {0,1,0,3,12}; new Solution().moveZeroes(nums); for (int i=0;i<nums.length;i++) System.out.print(nums[i]+" "); } }
思路:定義兩個儲存下標的欄位lastindex和moveindex,作為遍歷陣列的索引,moveindex從後向前遍歷直到陣列中元素為0
,然後根據lastindex與moveindex之間的差值,將已經遍歷的部分的元素前移,再將lastindex位置的元素置為0。