Leetcode-283. Move Zeroes

地址: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. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

方法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;
        }
    }
相關文章
相關標籤/搜索