移动零
初版(bug)
func moveZeroes(nums []int) {
if len(nums) == 1{
return
}
// 设置两个指针fp1,fp2分别指向第一个元素和第二个元素,
// 两种情况
// 假如指针fp1指向元素为零
// 1) *fp2!=0,则交换。
// 2) *fp2=0,则fp2后移,直至*fp2!=0,与fp1交换
// 假如指针fp1指向元素为不为零:
// 1) *fp2=0,则fp1与fp2后移,变成第一种情况;
// 2) *fp2!=0,fp1与fp2后移...
temp := 0
fp1, fp2 := 0, 1
for _, _ = range nums{
if fp2 == len(nums){
break
}
if nums[fp1] == 0{
if nums[fp2] != 0{
temp = nums[fp1]
nums[fp1] = nums[fp2]
nums[fp2] = temp
fp1++
fp2++
continue
}else{
fp2++
temp = nums[fp1]
nums[fp1] = nums[fp2]
nums[fp2] = temp
fp1++
continue
}
}else{
fp1++
fp2++
continue
}
}
}
可读性
func moveZeroes(nums []int) {
if len(nums) == 1 {
return
}
fp1, fp2 := 0, 1
for fp2 < len(nums) {
if nums[fp1] != 0 {
fp1++
fp2++
continue
}
if nums[fp2] != 0 {
nums[fp1], nums[fp2] = nums[fp2], nums[fp1]
fp1++
}
fp2++
}
}