Fork me on GitHub

leetcode——[283]Move Zeroes移动零

题目

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

例如, 定义 nums = [0, 1, 0, 3, 12],调用函数之后, nums 应为 [1, 3, 12, 0, 0]

注意事项:

  1. 必须在原数组上操作,不要为一个新数组分配额外空间。
  2. 尽量减少操作总数。

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:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

解题方法

循环遍历数组,用一个int number记录0的个数,number初始值为0,遇到非0元素则向前移动number个单位,遇到0则number加一。一次循环遍历之后,将数组后number个元素均赋值为0。这段代码时间复杂度为O(n),空间复杂度为O(1),跑了2ms,超过了100%的java提交。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public void moveZeroes(int[] nums) {
// Method_01 2ms 100%
int number = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
number++;
} else {
nums[i - number] = nums[i];
}
}
for (int i = nums.length - 1; i >= nums.length - number; i--) {
nums[i] = 0;
}
}
}

结语

第一次“首发破百”,直接code出了最佳方案,当然这也是因为这道题非常简单!也算是coding路上的一种激励吧!

BJTU-HXS wechat
海内存知己,天涯若比邻。