首页 > 其他 > 详细

Leetcode-283. Move Zeroes

时间:2019-04-29 00:19:21      阅读:124      评论:0      收藏:0      [点我收藏+]

地址: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.

给定一个数组 nums,写一个函数让数组中所有为0的元素移到数组的末尾,并且保持非0元素的相对位置

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

方法1:

/**
* 时间复杂度: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:

 
/**
* 时间复杂度:O(n)
* 空间复杂度:O(1)
* @param nums
*/
public void moveZeroes_2(int[] nums) {
int k = 0;
        int size = nums.length;

        for (int i = 0; i < size; i++) {
            if (nums[i] == 0) {
                swap(nums, i, k++);
            }
        }
    }

    private void swap(int[] nums, int i, int k) {
        int temp = nums[k];
        nums[k] = nums[i];
        nums[i] = temp;
    }

方法3:

/**
* 时间复杂度: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;
}
}

 

Leetcode-283. Move Zeroes

原文:https://www.cnblogs.com/zimengfang/p/10787712.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!