当前位置: 首页 > news >正文

283.移动零解题记录

最开始的想法是覆盖+补0

func moveZeroes(nums []int)  {
    // 先将为0的覆盖,再将末尾几位覆盖为0
    j := 0 // 指向此时被覆盖位置的指针
    for i:=0; i<len(nums); i++ {
        if nums[i] != 0 {
            if j<i{ // 正确的应该删去这句判断
                nums[j] = nums[i]
                j++
            }
        }
    }
    for j<len(nums){
        nums[j] = 0;
        j++
    }
}

但是这份代码存在问题。我想少几个覆盖次数,j<i带来了缺陷,j=i时就不会赋值非零的数据了,丢失了这些数据!而且 j 只有在赋值后才递增,j 始终 ≤ i。

更优雅的写法双指针交换法,思路是把不是0的数字一直往前交换:

func moveZeroes(nums []int)  {
    j := 0
    for i:=0; i<len(nums); i++ {
        if nums[i] != 0 {
            nums[j], nums[i] = nums[i], nums[j]
            j++
        }
    }
}

相关文章:

  • 深入解析 MyBatis-Plus 批量操作:原理、实现与性能优化
  • Matplotlib.day16
  • Nextjs15 - 什么是CSR、SSR、SSG和ISR
  • centos 7 搭建ftp 基于虚拟用户用shell脚本搭建
  • k8s存储介绍(六)StorangeClass
  • Redis :command not allowed when used memory
  • a, b = map(int, input().split()) 从用户输入中读取两个整数
  • 耘想Docker LinNAS,颠覆传统存储体验!
  • muduo库的思路梳理
  • 前端使用WPS WebOffice 做在线文档预览与编辑
  • Redux,React-redux。基础
  • 【脏读、不可重复读、幻读区别】
  • 云端陷阱:当免费午餐变成付费订阅,智能家居用户如何破局?
  • 【48】指针:函数的“数组入口”与“安全锁”——数组参数传递
  • 【Linux】嵌入式Web服务库:mongoose
  • pytorch与其他ai工具
  • 什么是异步编程,如何在 JavaScript 中实现?
  • 亚马逊多账号风控防护体系构建指南
  • 设计模式类型
  • Android 简化图片加载与显示——使用Coil和Kotlin封装高效工具类
  • 法治课|争议中的“行人安全距离”于法无据,考量“注意义务”才更合理
  • 射箭世界杯上海站摘得两银,中国队新周期冲击韩国缩小差距
  • 人民日报刊文:加快解放和发展新质战斗力
  • 上海市委常委会会议暨市生态文明建设领导小组会议研究基层减负、生态环保等事项
  • 方正证券总裁何亚刚到龄退休,54岁副总裁姜志军接棒
  • 习近平向中国人民解放军仪仗队致意