zoukankan      html  css  js  c++  java
  • LeetCode283. 移动零

    双指针,用两个指针zero和nonZero分别找到一个为0和一个不为0的数,且如果不为0的数在为0的数后面,则交换这两个数。
    如果在0的前面,则不用交换,zero指针不动,nonZero从zero指针的下一个位置开始寻找一个不为0的数,与zero指针交换。

    重复这个过程,直到两个指针其中之一越界。

    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            int zero = 0, nonZero = 0, size = nums.size();
            while(zero < size && nonZero < size) {
                while(zero < size && nums[zero] != 0) {
                    ++zero;
                }
                if(zero == size) {
                    return ;
                }
                while(nonZero < size && nums[nonZero] == 0) {
                    ++nonZero;
                }
                if(nonZero == size) {
                    return ;
                }
                if(zero < nonZero) {
                    swap(nums[zero], nums[nonZero]);
                } else {
                    nonZero = zero + 1;
                }
            }
        }
    };
    
  • 相关阅读:
    C# WebBrowser屏蔽alert的方法
    C# webbrowser实现真正意义上的F5刷新
    用于验证码图片识别的类(C#源码)
    递归
    排列组合数
    八皇后问题
    算24
    素数环
    acm
    qsort
  • 原文地址:https://www.cnblogs.com/linrj/p/13570921.html
Copyright © 2011-2022 走看看