LeetCode —— 复写零(双指针)

这篇具有很好参考价值的文章主要介绍了LeetCode —— 复写零(双指针)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

LeetCode —— 复写零(双指针),算法练习,leetcode,算法

题目解析

将数组中出现的每个零复写一遍,然后将其他元素向右平移,数组长度不能改变。

法一:使用额外空间的做法

LeetCode —— 复写零(双指针),算法练习,leetcode,算法

class Solution 
{
public:
    void duplicateZeros(vector<int>& arr) 
    {
        // 定义一个额外的vector
        vector<int> v;
        // 遍历数组
        for(auto&e:arr)
        {
            // 如果该元素不为0,则向新数组中插入一个该元素
            if(e) v.push_back(e);
            // 如果该元素为0,则向新数组中插入两个该元素
            else
            {
                v.push_back(0);
                v.push_back(0);
            }
        }
        // 改变新数组的大小为老数组大小
        v.resize(arr.size());
        // 将老数组赋值给新数组
        arr=v;
    }
};

法二:原地修改的做法

LeetCode —— 复写零(双指针),算法练习,leetcode,算法

LeetCode —— 复写零(双指针),算法练习,leetcode,算法 

LeetCode —— 复写零(双指针),算法练习,leetcode,算法 

class Solution 
{
public:
    void duplicateZeros(vector<int>& arr) 
    {
        int n=arr.size();
        int cur=0,dest=-1;
        // 找最后一个复写的元素
        while(cur<n)
        {
            if(arr[cur]==0) dest+=2;
            else dest++;
            if(dest>=n-1) break;
            cur++;
        }
        // 处理边界情况
        if(dest==n)
        {
            arr[n-1]=0;
            cur--;
            dest-=2;
        }
        // 覆盖
        while(cur>=0)
        {
            if(arr[cur]==0)
            {
                arr[dest--]=arr[cur];
                arr[dest--]=arr[cur--];
            }
            else
            {
                arr[dest--]=arr[cur--];
            }
        }
    }
};

 文章来源地址https://www.toymoban.com/news/detail-696079.html

到了这里,关于LeetCode —— 复写零(双指针)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode每日一题之 复写0

    目录 题目介绍: 算法原理: 特殊位置处理: 代码实现: 题目链接:. - 力扣(LeetCode) 这种对数组元素进行修改,移动的题目我们仍然可以使用双指针法,不过我们按照常规思路从左到右处理数组,不难发现如下这种问题: 当cur指向1时,让dest下一个元素复写cur指向的元素

    2024年04月23日
    浏览(58)
  • 【优选算法】专题1 -- 双指针 -- 复写0

    前言: 补充一下前文没有写到的双指针入门知识:专题1 -- 双指针 -- 移动零 目录 基础入门知识: 1. 复写零(easy) 1. 题⽬链接:1089.复习0 - 力扣(LeetCode) 2. 题⽬描述: 3.算法原理: 异地操作 本地操作 【从后向前的复写过程】 整体思路: 🎯1.先找到最后一个“复写”的

    2024年04月17日
    浏览(33)
  • 【算法专题突破】双指针 - 复写零(2)

    目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:1089. 复写零 - 力扣(Leetcode) 我先来读题, 题目的意思非常的简单,其实就是, 遇到 0 就复制一个写进数组,然后右边的元素就右移一位, 看一眼例子可以很容易理解题意。  一般像这种需要移动数组的元素

    2024年02月11日
    浏览(46)
  • 【算法】活用双指针完成复写零操作

    Problem: 1089. 复写零 首先我们来分析一下本题的题目意思 可以看到题目中给到了一个数组,意思是让我们将数组中的零元素都复写一遍,然后将其余的元素向后平移 光就上面这样来看还是不太形象,我们通过画图来分析一下,通过下图我们可以看到,凡是0的都复写了两遍,凡

    2024年02月11日
    浏览(53)
  • Leetcode | 对撞指针算法笔记

    对撞指针的基本思想是在 数组或链表等数据结构 中使用两个指针( left 或 right 、 start 或 end 等表示),分别从不同的方向(通常是数组的两端)移动,以便有效地进行 搜索、遍历或判断 。 对撞指针常见的运用场景包括: 排序数组的查找 :对撞指针可以用于在已排序的数

    2024年02月12日
    浏览(86)
  • 算法练习--leetcode 数组

    输入n阶楼梯,每次爬1或者2个台阶,有多少种方法可以爬到楼顶? 示例1:输入2, 输出2 一次爬2阶; 一次爬1阶; 故两种方法。 示例2: 输入3, 输出3 三个1; 一个1 + 一个 2; 一个2 + 一个1; 思路分析: 采用递归求解 python实现: java实现 : 类似爬楼梯问题。   给定一个 整

    2024年02月14日
    浏览(40)
  • 【算法挨揍日记】day01——双指针算法_移动零、 复写零

    283. 移动零 https://leetcode.cn/problems/move-zeroes/ 题目: 给定一个数组  nums ,编写一个函数将所有  0  移动到数组的末尾,同时保持非零元素的相对顺序。 请注意  ,必须在不复制数组的情况下原地对数组进行操作。    解题思路: 我们可以利用两个指针(dest和cur)的方法,

    2024年02月11日
    浏览(34)
  • LeetCode算法小抄 -- 链表(快慢指针、双指针、回文链表)

    ⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计10077字,阅读大概需要10分钟 🌈更多学习内容, 欢迎👏关注👀文末我的个人微信公众号:不懂开发的程序猿 个人网站:https://jerry-jy.co/ Collection 子接口之 Queue (LeetCode上经常用,手撕算法题!

    2023年04月08日
    浏览(41)
  • 算法练习Day26 (Leetcode/Python-贪心算法)

    122. Best Time to Buy and Sell Stock II You are given an integer array  prices  where  prices[i]  is the price of a given stock on the  ith  day. On each day, you may decide to buy and/or sell the stock. You can only hold  at most one  share of the stock at any time. However, you can buy it then immediately sell it on the  same day . Find and return 

    2024年02月03日
    浏览(42)
  • 【算法练习】leetcode算法题合集之二叉树篇

    前序遍历,中序遍历,后序遍历是根据处理根节点的位置来命名的。 树的处理大多用到了递归,递归需要知道终止条件。 前序遍历(中左右) 144.二叉树的前序遍历 中左右,先处理根节点,再处理左子树,再处理右子树 非递归版实现前序遍历 使用栈,当前节点处理完,先塞

    2024年02月01日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包