j

jaryue

V1

2023/03/20阅读:15主题:默认主题

leecode283移动0

leecode

题目描述

解题思路

法1

双指针

  1. 指针i在前,j在后从0开始循环遍历找到num[i]==0
for i, j := 01; j < len(nums) && i < len(nums); {//循环遍历
  if nums[i] == 0 && i != len(nums)-1 {//只有当位置i=0时开始交换
  //后续操作代码````
  } else {
   i++
  }
 }
  1. 当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 := 01; 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

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1