把数组中的0移动到末尾
把数组中的0移动到末尾
题目
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。
示例1:
输入:[0, 1, 0, 3, 12]
输出:[1, 3, 12, 0, 0]
解释:元素0移动到了末尾,且非零元素保持原有顺序不变
解答1:
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length, left = 0, right = 0;
while (right < n) {
if (nums[right] != 0) {
nums[left]=nums[right];
left++;
}
right++;
}
//非0元素统计完了,剩下的都是0了
//所以第二次遍历把末尾的元素都赋0即可
for(int i=left;i<nums.length;i++){
nums[i]=0;
}
}
}
class Solution {
moveZeroes(nums) {
let n = nums.length;
let left = 0;
let right = 0;
while (right < n) {
if (nums[right] !== 0) {
nums[left] = nums[right];
left++;
}
right++;
}
// 非0元素统计完了,剩下的都是0了
// 所以第二次遍历把末尾的元素都赋0即可
for (let i = left; i < nums.length; i++) {
nums[i] = 0;
}
}
}
class Solution:
def moveZeroes(self, nums):
n = len(nums)
left = 0
right = 0
while right < n:
if nums[right] != 0:
nums[left] = nums[right]
left += 1
right += 1
# 非0元素统计完了,剩下的都是0了
# 所以第二次遍历把末尾的元素都赋0即可
for i in range(left, len(nums)):
nums[i] = 0
package main
type Solution struct{}
func (s *Solution) moveZeroes(nums []int) {
n := len(nums)
left := 0
right := 0
for right < n {
if nums[right] != 0 {
nums[left] = nums[right]
left++
}
right++
}
// 非0元素统计完了,剩下的都是0了
// 所以第二次遍历把末尾的元素都赋0即可
for i := left; i < len(nums); i++ {
nums[i] = 0
}
}
func main() {
// 示例用法
nums := []int{0, 1, 0, 3, 12}
s := Solution{}
s.moveZeroes(nums)
fmt.Println(nums)
}