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

每日算法【双指针算法】(Day 2-复写零)

双指针算法

  • 1.算法题目(复写零)
  • 2.讲解算法原理
  • 3.编写代码

1.算法题目(复写零)

在这里插入图片描述
注意:不要越界,不能开额外的数组,只能从现有数组上进行操作,没有返回值。

2.讲解算法原理

解法:双指针操作
先根据“异地”操作,然后优化成双指针的“就地”操作。
在这里插入图片描述

  • 先找到最后一个“复写”的数;
  • 双指针算法
    解释:用一个数组,让cur指向下标为0的位置,让dest指向下标为-1的位置,判断cur指向的元素是否为零,不为零dest向后移动一位,判断dest是否移动到最后一位,没有就再次移动cur一位,如果cur指向的元素为零,就要dest向后移动两位,再判断dest是否结束,结束就知道复写数组最后一个元素是什么。
  • 先判断cur位置的值
  • 决定dest向后移动一步或者两步
  • 判断一下dest是否已经到结束为止
  • cur++
  1. 处理一下边界情况
    因为dest可能存在越界的情况
n-1=0;
cur--;
dest-=2;
  1. “从后向前”完成复写操作;
    因为我们已经知道最后一个元素是什么了,”从后往前“复写也不会存在覆盖的情况。

3.编写代码

class Solution {
public:void duplicateZeros(vector<int>& arr) {//1.先找最后一个元素int cur = 0, dest = -1, n = arr.size();while (cur < n){if (arr[cur])dest++;else dest += 2;if (dest >= n - 1)break;cur++;}//2.处理边界问题if (dest == n){arr[n - 1] = 0;cur--; dest -= 2;}//3.从后向前完成复写while (cur >= 0){if (arr[cur])arr[dest--] = arr[cur--];else{arr[dest--] = 0;arr[dest--] = 0;cur--;}}}
};

相关文章:

  • 搜广推校招面经七十八
  • Linux系统编程之守护进程与调试技术
  • 施磊老师基于muduo网络库的集群聊天服务器(二)
  • 大模型如何突破“知识盲区”?一场静悄悄的技术革命正在发生
  • Pytest 的配置和命令行选项:掌控你的测试执行 (Pytest 系列之七)
  • VirtualBox导入 .ova 文件出错,怎么解决
  • 【Linux学习笔记】进程调度与切换之O(1)调度算法
  • Oracle日志系统之重做日志和归档日志
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(四级)答案 + 解析
  • Python项目调用Java数据接口实现CRUD操作
  • 什么是Python单例模式
  • Python 3.13 support for PyTorch
  • python中MongoDB 的两个驱动
  • 基于C++(MFC)图形编辑界面工具
  • 一个可以自定义Java服务名日志打印的小工具
  • CSS 文件格式
  • Ubuntu上安装Mysql
  • redis利用备忘录
  • 在 Vue 3 中将拆分后的数组合并回原数组
  • 云轴科技ZStack入选中国人工智能产业发展联盟《大模型应用交付供应商名录》
  • 62岁中国国际商会副会长、康力电梯创始人王友林逝世
  • 官方披露:定西民政局原局长将收受烟酒高价“倒卖”给单位,用于违规接待
  • 张九思任电子科大副教授,曾以学生身份入选爱思唯尔全球前2%顶尖科学家
  • 谷雨播种正当时,上海黄道婆纪念公园种下“都市棉田”
  • 体坛联播|中国U16女足击败墨西哥,王星昊首获世界冠军
  • 上海地铁18号线二期长轨贯通,预计今年年底开通初期运营