• [LeetCode] 283. 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.

    For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

    Note:

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

    Credits:
    Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

    把一个数组里所有的0都移到后面,不能改变非零数的相对位置关系,而且不能拷贝额外的数组。

    要用替换法in-place,双指针来做,前面的指针指向处理过的最后一个非零数字, 后面一个指针向后扫,遇到非零数字,和前面指针所指数字交换位置,前面指针后移1位。

    或者不交换只把非零的数字换到前面,最后子统一把后面的全部变成0。

    Java: Time Complexity: O(n), Space Complexity: O(1)

    public class Solution {
        public void moveZeroes(int[] nums) {
            int index = 0;
            for (int i = 0; i < nums.length; ++i) {
                if (nums[i] != 0) {
                    nums[index++] = nums[i];
                }
            }
            for (int i = index; i < nums.length; ++i) {
                nums[i] = 0;
            }
        }
    }
    

    Python:

    class Solution(object):
        def moveZeroes(self, nums):
            """
            :type nums: List[int]
            :rtype: void Do not return anything, modify nums in-place instead.
            """
            pos = 0
            for i in xrange(len(nums)):
                if nums[i]:
                    nums[i], nums[pos] = nums[pos], nums[i]
                    pos += 1
    

    C++:

    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            int pos = 0;
            for (auto& num : nums) {
                if (num) {
                    swap(nums[pos++], num);
                }
            }
        }
    };
    

    类似题目:

    [LeetCode] 27. Remove Element

    All LeetCode Questions List 题目汇总  

  • 相关阅读:
    vue-router路由器的使用
    组件间数据传递
    引用模块和动态组件
    vue自定义全局和局部指令
    vue实例的属性和方法
    vue生命周期以及vue的计算属性
    vue 发送ajax请求
    安装vue-cli脚手架
    vue指令详解
    scrapy-redis组件的使用
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8495822.html
Copyright © 2020-2023  润新知