要求:空間複雜度不能超過O(1)
example:
給定數組[0,2,0,7]轉換後應爲[2,7,0,0]
輸入:
第一行輸入一個數位數組的長度
其他的數爲數組中元素。
分析:該題目的難點在於將非0的元素移動到數組的前端的時候必須要保持數組原來元素的順序。我們可以看出0元素是確定的元素,我們可以統計0元素的個數之後,我們其他的元素向前移動的時候就可以將0覆蓋。
下面是詳細的實現:
public class MoveZeroElement { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = s.nextInt(); } getResult(nums); } private static void getResult(int[] nums) { if (nums == null || nums.length == 0) return; int count = 0; for (int n : nums) if (n == 0) count++; int zeroIndex = nums.length-count; for (int i = 0; i < zeroIndex; i++) { if (nums[i] == 0){ int j = i+1; while (nums[j] == 0) j++; nums[i] = nums[j]; nums[j] = 0; } } for (int i = zeroIndex; i < nums.length; i++) { nums[i] = 0; } System.out.println(Arrays.toString(nums)); } }