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

【双指针算法】移动零

1.题目解析

2.算法分析

可以归结为数组划分/数组分块(采用双指针算法)-->利用数组下标充当指针

(1)首先定义两个指针 

  • dest:已处理的区间内,非零元素的最后一个位置
  • cur:从左往右扫描数组,遍历数组

(2)将数组划分为三个部分:

  • [0,dest]:已处理的元素,全部为非0
  • [dest+1,cur-1] :全部为0
  • [cur,n-1]:待处理元素

(3)cur从前往后移动的过程

  • 遇到0,直接cur++
  • 遇到非0元素,swap(des+1,cur),cur++,des++

双指针算法是快排最核心的一步,设置基准元素tmp,左边让他都小于tmp,右边让他都小于tmp

3.代码编写

class Solution {public void moveZeroes(int[] nums) {int dest=-1;int cur=0;while(cur<nums.length){if(nums[cur]==0){cur++;}else{int tmp=nums[dest+1];nums[dest+1]=nums[cur];nums[cur]=tmp;cur++;dest++;}}} 
}

4.复杂度分析

时间复杂度:O(N)

空间复杂度:O(1)


http://www.mrgr.cn/news/49568.html

相关文章:

  • 6.Pytest快速上手
  • 从经济学原理看团队分工合作
  • 动态规划基础与经典问题
  • 微知-BlueField DPU在lspci中显示Flash Recovery是什么意思?
  • 学成在线——关于nacos配置优先级的坑
  • 【Redis】分布式(day12)
  • Java的四种循环语句
  • 论文Idea | 人工智能与建筑的交叉领域探索
  • 通信工程学习:什么是SRAM静态随机存取存储器
  • Leetcode 3315. Construct the Minimum Bitwise Array II
  • 执行powershell脚本出错:未对文件进行数字签名
  • lenovo联想 ThinkPad E14 Gen 2,E15 Gen 2 AMD(20T6,20T7,20T8,20T9)原厂Win10系统镜像下载
  • 2275. 按位与结果大于零的最长组合
  • 生信服务器配置:优化生物信息学数据处理的最佳实践
  • Redis 典型应用之缓存
  • 问题专题 编译问题
  • 【Java数据结构】二叉树
  • ZED相机的使用
  • 基于Arduino的红外遥控智能小车实现方法
  • C++STL(2)