当前位置: 首页 > 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);}
http://www.lqws.cn/news/192601.html

相关文章:

  • Android Test3 获取的ANDROID_ID值不同
  • ​​TPS3808​​低静态电流、可编程延迟电压监控电路,应用笔记
  • 初识AI Agent
  • Rust 开发环境搭建
  • 精益数据分析(95/126):Socialight的定价转型启示——B2B商业模式的价格策略与利润优化
  • 超声波清洗设备的清洗效果如何?
  • CMA软件产品测试报告在哪申请?
  • AI对测试行业的应用
  • 中医的十问歌和脉象分类
  • 基于KNN算法的入侵检测模型设计与实现【源码+文档】
  • 【深度学习新浪潮】RoPE对大模型的外推性有什么影响?
  • yolov8自训练模型作为预训练权重【增加新类别】注意事项
  • 事件监听 ——CAD C#二次开发
  • react 常见的闭包陷阱深入解析
  • 几何引擎对比:OpenCasCade、ACIS、Parasolid和CGM
  • n皇后问题的 C++ 回溯算法教学攻略
  • 比对++Hex or Bin文件
  • Xilinx 325T FPGA 中的 GT(GTP 或 GTX)收发器和普通 LVDS 接口的差模和共模电压
  • 逻辑回归与Softmax
  • [蓝桥杯]防御力
  • hg38与hg38相互转换:使用LiftOver在线工具
  • 《架构即未来》笔记
  • LinkedBlockingQueue、ConcurrentLinkedQueue和ArrayBlockingQueue深度解析
  • 单片机0-10V电压输出电路分享
  • 11.RV1126-ROCKX项目
  • 12.6Swing控件4 JSplitPane JTabbedPane
  • Lrc歌词分析
  • 【信息系统项目管理师-案例真题】2025上半年(第二批)案例分析答案和详解(回忆版)
  • 业务设计需要做好哪几点?
  • C++中switch-case的性能优化策略详解