0%

初级算法-移动零

题目

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

示例:

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

说明:

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

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
Do not return anything, modify nums in-place instead.
*/
function moveZeroes(nums: number[]): void {
let leftIndex = 0;
let rightIndex = nums.length - 1;
while (leftIndex <= rightIndex) {
if (nums[leftIndex] !== 0) {
leftIndex++;
continue;
}
nums.splice(leftIndex, 1);
nums.push(0);
rightIndex--;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
impl Solution {
pub fn move_zeroes(nums: &mut Vec<i32>) {
let mut left = 0;
let mut right = nums.len();
while left < right {
if nums[left] == 0 {
nums.splice(left..left + 1, []);
nums.push(0);
right = right - 1;
} else {
left = left + 1;
}
}
}
}

参考链接