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

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

    1. 必须在原数组上操作,不能拷贝额外的数组。
    2. 尽量减少操作次数。

    一个指针指向最左侧的零,一个int记录已经遇到的0的长度;如果下一个是0,就直接把长度+1;如果不是,就交换最左侧的零和nums[i],然后left++

    注意判断的时候要先判断i是否小于n再判断nums[i],否则会导致内存越界

     1 class Solution {
     2 public:
     3     void moveZeroes(vector<int>& nums) {
     4         int n=nums.size();
     5         if(!n)
     6             return ;
     7         int left=0,len=0;
     8         for(int i=0;i<n;++i){
     9             if(len==0){
    10                 while(i<n && nums[i]!=0)
    11                     ++i;
    12                 if(i==n)
    13                     return ;
    14                 left=i;
    15                 ++len;
    16             }
    17             else{
    18                 if(nums[i]==0)
    19                     ++len;
    20                 else{
    21                     swap(nums[left],nums[i]);
    22                     ++left;
    23                 }
    24             }
    25         }
    26         return ;
    27     }
    28 };
  • 相关阅读:
    第 9 章
    第 8 章
    第 7 章
    第 6 章
    第 5 章
    第 4 章
    跳舞链解数独
    minic 类型声明与变量定义句型处理
    minic 动作句型处理
    minic 符号表
  • 原文地址:https://www.cnblogs.com/rookiez/p/13345334.html
Copyright © 2011-2022 走看看