Keshawn_lu's Blog

Leetcode 283. 移动零

字数统计: 231阅读时长: 1 min
2020/11/20 Share

题目简介:

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

示例:

1
2
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

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

思路:

思路很简单,就是从后往前遍历,遇到0时,便让其不断下沉,直至遇见0为止。

这样便可以保证其他元素的相对位置不发生改变。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
void moveZeroes(vector<int>& nums) {

int left = nums.size() - 1;

while(left >= 0){

while(left > 0 && nums[left] != 0)
left--;

if(nums[left] != 0) //left移动到了开头且第一个元素不为0
break;

for(int i = left; i < nums.size() - 1 && nums[i + 1] != 0; i++){

swap(nums[i], nums[i + 1]); //0不断下沉
}

left--;
}
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: