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 };

 

posted @ 2020-07-20 15:24  __rookie  阅读(131)  评论(0编辑  收藏  举报