https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-liked
使用双指针法:index_0指向第一个零的位置,index_not_0指向第一个非零的位置。当找到非零元素且在零元素之后时,交换两者值,并更新index_0指向下一个零。时间复杂度O(n),空间复杂度O(1),通过原地交换实现零元素后移,保持非零元素相对顺序不变。
func moveZeroes(nums []int) {
index_0 := 0 // 用于指向第一个0的位置
for index_0 < len(nums) && nums[index_0] != 0 {
index_0++
}
index_not_0 := 0 // 用于指向第一个非0的位置
for index_not_0 < len(nums) && nums[index_not_0] == 0 {
index_not_0++
}
for index_not_0 < len(nums) {
if nums[index_not_0] != 0 && index_not_0 > index_0 {
tmp := nums[index_not_0]
nums[index_not_0] = nums[index_0]
nums[index_0] = tmp
// index_0要找到下一个0的位置
for index_0 < len(nums) && nums[index_0] != 0 {
index_0++
}
}
index_not_0++ // 无论如何都要向前推进
}
}
250

被折叠的 条评论
为什么被折叠?



