zoukankan      html  css  js  c++  java
  • LeetCode 283 Move Zeroes(移动全部的零元素)

    翻译

    给定一个数字数组。写一个方法将全部的“0”移动到数组尾部。同一时候保持其余非零元素的相对位置不变。
    
    比如,给定nums = [0, 1, 0, 3, 12],在调用你的函数之后,nums应该变为[1, 3, 12, 0, 0]。
    
    备注:
    你必须就地完毕,不得复制该数组。

    最小化总共的操作数。

    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.

    分析

    一開始我还以为是要给非零元素排序呢,后来细致一看仅仅是保持相对位置不变就好了。

    那就easy非常多了呀。

    0 1 0 3 12 (index = 0, current = 0)
    1 0 0 3 12 (index = 1, current = 1)
    1 0 0 3 12 (index = 1, current = 2)
    1 3 0 0 12 (index = 2, current = 3)
    1 3 12 0 0 (index = 3, current = 4)

    按上面的步骤来,当前的数字是0的话不做操作。非零的话将其与第一个零互换位置。

    其核心在于这个第一个零的位置是怎样变化的。即便一開始不是0也没关系,大不了让这个非零数和自己交换位置呗,比方说:

    1 2 0 3 12 (index = 0, current = 0)
    1 2 0 3 12 (index = 1, current = 1)
    1 2 0 3 12 (index = 2, current = 2)
    1 2 3 0 12 (index = 3, current = 3)
    1 2 3 12 0 (index = 4, current = 4)

    翻译成代码就是:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void moveZeroes(vector<int>& nums) {
        for (int index = 0, current = 0; current < nums.size(); current++) {
            if (nums[current] != 0)
                swap(nums[index++], nums[current]);
        }
    }
    
    int main() {
        vector<int> v;
        v.push_back(1);
        v.push_back(2);
        v.push_back(0);
        v.push_back(3);
        v.push_back(12);
    
        moveZeroes(v);
    
        for (auto i : v) {
            cout << i << " ";
        }
        return 0;
    }
    

    代码

    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            for (int index = 0, current = 0; current < nums.size(); current++) {
                if (nums[current] != 0)
                    swap(nums[index++], nums[current]);
            }
        }
    };
  • 相关阅读:
    STL算法概述
    pentaho DI Tutorial (spoon)
    pentaho DIGet Started (spoon)
    Apache Tomcat 7学习笔记(一) 介绍tomcat7
    蜻蜓resin3.1配置文件中文注释
    CentOS防火墙开启、关闭以及开放指定端口
    CentOS5.6蜻蜓resin服务器的搭建
    (总结)RHEL/CentOS 5.x使用第三方软件库(EPEL与RPMForge、RPMFusion软件库)
    用yum安装lamp环境
    蜻蜓resin服务器虚拟目录的设置
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7207723.html
Copyright © 2011-2022 走看看