j
jaryue
V1
2023/03/20阅读:15主题:默认主题
leecode283移动0
leecode
题目描述
解题思路
法1
双指针
-
指针i在前,j在后从0开始循环遍历找到num[i]==0
for i, j := 0, 1; j < len(nums) && i < len(nums); {//循环遍历
if nums[i] == 0 && i != len(nums)-1 {//只有当位置i=0时开始交换
//后续操作代码````
} else {
i++
}
}
-
当num[j]!=0时交换ij位置的数值
if nums[j] != 0 {//位置j!=0时交换位置
t := nums[i]
nums[i] = nums[j]
nums[j] = t
i++
}
j++//如果j=0就一直自增,直到不为0或者到数组尾部结束
执行结果
法1
// 双指针法
func moveZeroes(nums []int) {
for i, j := 0, 1; j < len(nums) && i < len(nums); {//循环遍历
if nums[i] == 0 && i != len(nums)-1 {//只有当位置i=0时开始交换
if j < i {//j必须在i之后
j = i + 1
}
if nums[j] != 0 {//位置j!=0时交换位置
t := nums[i]
nums[i] = nums[j]
nums[j] = t
i++
}
j++//如果j=0就一直自增,直到不为0或者到数组尾部结束
} else {
i++
}
}
}
执行用时: 16 ms , 在所有 Go 提交中击败了 94.82% 的用户 内存消耗: 6.5 MB , 在所有 Go 提交中击败了 25.88% 的用户 通过测试用例: 74 / 74
作者介绍
j
jaryue
V1