地址:https://leetcode.com/problems/move-zeroes/數組
項目描述:函數
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.this
給定一個數組 nums,寫一個函數讓數組中全部爲0的元素移到數組的末尾,而且保持非0元素的相對位置spa
示例:code
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
Note:blog
方法1:element
/**
* 時間複雜度:O(n)
*空間複雜度:O(n)
* @param nums
*/
public void moveZeroes_1(int[] nums) {
ArrayList<Integer> list = new ArrayList<>(); int size = nums.length; for (int i = 0; i < size; i++) { if (nums[i] != 0) { list.add(nums[i]); } } for (int i = 0; i < list.size(); i++) { nums[i] = list.get(i); } for (int i = list.size(); i < size; i++) { nums[i] = 0; } }
方法2:leetcode
/** * 時間複雜度:O(n) * 空間複雜度:O(1) * @param nums */ public static void moveZeroes_2(int[] nums) { int k = 0; // nums 中,[0...k)的元素均爲非0元素 int size = nums.length; // 遍歷到第 i 個元素後,保證[0...i]中全部非0元素都按照順序排列在[0...k)中 // 同時,[k...i]爲0 for (int i = 0; i < size; i++) { if (nums[i] == 0) { swap(nums, i, k++); } } } private static void swap(int[] nums, int i, int k) { int temp = nums[k]; nums[k] = nums[i]; nums[i] = temp; }
方法3:get
/** * 時間複雜度:O(n) * 空間複雜度:O(1) * @param nums */ public static void moveZeroes_3(int[] nums) { int k = 0; // nums 中,[0...k)的元素均爲非0元素 int size = nums.length; // 遍歷到第 i 個元素後,保證[0...i]中全部非0元素都按照順序排列在[0...k)中 for (int i = 0; i < size; i++) { if (nums[i] != 0) { nums[k++] = nums[i]; } } // 將 nums 剩餘的位置放置爲0 for (int i = k; i < size; i++) { nums[i] = 0; } }