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

力扣100-移动0

方法1 双指针、

在这里插入图片描述

代码1

public  void  moveZeroes(int[] nums) {//给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。////请注意 ,必须在不复制数组的情况下原地对数组进行操作。/* 双指针协作:slow 指针:指向下一个非零元素应放置的位置。fast 指针:遍历数组,寻找非零元素。两次遍历:第一次遍历:将所有非零元素按原顺序移动到数组前部。第二次遍历:将 slow 指针之后的位置全部置为零。*/int slow = 0;int fast =0 ;for(int i = 0 ; i < nums.length;i++){//1.快指针寻找非零元素//2.慢指针指向下一个非零元素应放置的位置
//            int[] nums = {0, 1, 0, 3, 12};while(fast< nums.length ){if(nums[fast] != 0){nums[slow] =nums[fast];// 复制非零元素到慢指针位置slow++;}fast++;}//进行补0while(slow<nums.length){nums[slow]=0;slow++;}}}

代码优化

 public void moveZeroes(int[] nums) {//还是一种双指针思路,只是简化了部分代码int i =0;for(int j =0 ;j<nums.length;j++){if(nums[j]!= 0 ){//非零元素进行交换int temp = nums[j];nums[j]=  nums[i];nums[i]=temp;i++;}}}

方法二 把 nums 当作栈

//用一个栈记录非零元素。
//入栈就是把 nums[stackSize] 置为 nums[i],同时把 stackSize 加一。//最后把 nums 中的下标从 stackSize 到 n−1 的数都置为 0。public void moveZeroes(int[] nums) {int stackSize = 0; for(int x : nums){if(x != 0){nums[stackSize++] =x;}}Arrays.fill(nums,stackSize,nums.length,0);}

相关文章:

  • 学习STC51单片机29(芯片为STC89C52RCRC)
  • 6.6 day38
  • 2025年6月6日15:48:23
  • 数字孪生:解锁未来的“数字钥匙”
  • 如何在Lyra中创建一个新的Game Feature Plugin和Experience游戏体验
  • c++中的输入输出流(标准IO,文件IO,字符串IO)
  • 从0开始学习R语言--Day18--分类变量关联性检验
  • Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
  • EM储能网关ZWS智慧储能云应用(11) — 一级架构主从架构
  • 关于事务的简介
  • 人机融合智能 | “人智交互”跨学科新领域
  • 高通camx CaptureSession
  • 使用 SymPy 进行向量和矩阵的高级操作
  • 电子电气架构 --- 什么是功能架构?
  • Docker容器化技术概述与实践
  • Chrome书签的导出与导入:步骤图
  • 掌握子网划分:优化IP分配与管理
  • Ubuntu 系统静态网络配置
  • 从webrtc到janus简介
  • 用Cursor与Chrome插件爬取网页数据
  • 企业网站建设套餐/最近营销热点
  • 安阳 做网站/电子制作网站
  • 棋牌游戏开发出售/单页网站怎么优化
  • 做一家购物网站要多少钱/新闻株洲最新
  • 电子商务的网站建设分析/免费建站的平台
  • 茂名公司网站设计团队/百度官网平台