LeetCode - 283. Move Zeroes
链接
题意
给定一个数组,将其中所有的零移动至数组末尾,而非零数字的相对位置保持不变。
要求:
- 就地移动
- 操作数最少
思路
方法1:先找到所有0的个数,然后直接将数组中非0元素一个一个插入,再根据0的个数补齐数组。
方法2:来自讨论区,发现根本不需要计算0的个数。直接将非0元素一个一个插入,然后补齐0即可。
代码
Java 1:
public class Solution {
public void moveZeroes(int[] nums) {
int count = 0;
int index = 0;
for(int i = 0; i < nums.length; i++) // 找所有0的个数
if(nums[i] == 0) count++;
if(count == nums.length) return;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[index++] = nums[i];
}
}
for(int i = nums.length - count; i < nums.length; i++) {
nums[i] = 0;
}
}
}
// Your runtime beats 20.74 % of java submissions.
Java 2:
public void moveZeroes(int[] nums) {
if (nums == null || nums.length == 0) return;
int insertPos = 0;
for (int num: nums) {
if (num != 0) nums[insertPos++] = num;
}
while (insertPos < nums.length) {
nums[insertPos++] = 0;
}
}
// Your runtime beats 74.30 % of java submissions.