LeetCode题号:283. 移动零
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解题思路:
最先想到的就是双指针解法,快慢指针遍历一次原地替换,使用快慢指针,只要nums[i] != 0, 交换 nums[i] 和 nums[j],进行元素互换,目的是同步j 移动指针; 只要数组中存在0元素,i一定比j走得快,所以靠慢指针j进行控0换位
代码如下:
func moveZeroes(nums []int) {
//用j标记非零下标
var j int
for i := 0; i <= len(nums); i++ {
//注意临界,跳出循环
if i == len(nums) {
break
}
//当遇到nums[i]不为零,则进行元素互换,目的是同步j
//只要数组中存在0元素,i一定比j走得快,所以靠慢指针j进行控0换位
if nums[i] != 0 {
nums[i], nums[j] = nums[j], nums[i]
// var temp =nums[j]
// nums[j] = nums[i]
// nums[i] = temp
j++
}
}
}
❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ
❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~
❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】
❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言论)。