审题
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
题目解析
将所有大于 0 的数字移动到数组头部并保持原有顺序,注意本题不允许额外内存开销。
第一次
暴力解法,如果某个位置存在 0 值,那么持续向后查询,将查询到的第一个数字填充到此位置。
class Solution {
public void moveZeroes(int[] nums) {
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] != 0) {
nums[i] = nums[j];
nums[j] = 0;
break;
}
}
}
}
}
}
第二次
仔细审题可以发现,正整数总是按顺序在前面,遇到正整数只需无脑填充到指定位置就可以了,并且在最后一个目标位置后填充 0
class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[index] = nums[i];
index++;
}
}
for (int i = index; i < nums.length; i++) {
nums[i] = 0;
}
}
}
网友评论