[LeetCode]-283. 移动零-1089. 复写零

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

目录

283. 移动零

描述

 解析

代码

1089. 复写零

描述

解析

代码


283. 移动零

283. 移动零https://leetcode.cn/problems/move-zeroes/

描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入:nums=[0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入:nums=[0]
输出: [0]

 解析

利用双指针思想,前指针cur遍历数组,判断nums[cur],找出非0的数,再与后指针dest下标所在的数nums[dest]交换,将数组划分为三块区域非0区、0区、带处理区,直到cur处理完数组的最后一个数字。

[LeetCode]-283. 移动零-1089. 复写零,算法百炼,leetcode,算法,数据结构

代码

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        for(int cur=0,dest=-1;cur<nums.size();cur++)
            if(nums[cur])
                swap(nums[cur],nums[++dest]);
    }
};

1089. 复写零

1089. 复写零https://leetcode.cn/problems/duplicate-zeros/

描述

给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

示例 1:

输入:arr = [1,0,2,3,0,4,5,0]
输出:[1,0,0,2,3,0,0,4]
解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]

示例 2:

输入:arr = [1,2,3]
输出:[1,2,3]
解释:调用函数后,输入的数组将被修改为:[1,2,3]

解析

1.先找到最后一个“复写”的数

双指针算法:1.先判断cur位置的值。2.决定dest向后移动异步或者两步。3.判断一下是否已经结束为止。4.cur++

2.处理一下边界情况

3.“从后往前”完成复写操作

[LeetCode]-283. 移动零-1089. 复写零,算法百炼,leetcode,算法,数据结构

代码

class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        int cur=0,dest=-1;int n=arr.size();
        //找到复写后数组最后一个数下标
        while(cur<n)
        {
            if(arr[cur]==0) dest+=2;
            else dest++;
            if(dest>=n-1) break;
            else cur++;
        }
        //处理边界情况
        if(dest==n)
        {
            arr[n-1]=0;
            cur--;
            dest-=2;
        }
        //从后往前复写
        while(cur>=0)
        {
            if(arr[cur]==0) {arr[dest--]=0;arr[dest--]=0;}
            else arr[dest--]=arr[cur];
            cur--;
        }
    }
};

[LeetCode]-283. 移动零-1089. 复写零,算法百炼,leetcode,算法,数据结构文章来源地址https://www.toymoban.com/news/detail-753175.html

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

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

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

相关文章

  • leetcode283. 移动零

    难度:简单题 题目 给定一个数组  nums ,编写一个函数将所有  0  移动到数组的末尾,同时保持非零元素的相对顺序。 请注意  ,必须在不复制数组的情况下原地对数组进行操作。 思路: 一开始想,从前往后遍历,遇到0就挪到最后。类似于冒泡的思想,但是这样做的话时

    2024年02月12日
    浏览(68)
  • Leetcode 283. 移动零

    题目链接 283. 移动零 给定一个数组 nums ,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 示例 2: 这道题目的意思是我们将所有的0都移动到数组的后面,非零的元素放在前面.不过我

    2024年02月08日
    浏览(31)
  • Leetcode 283.移动零

    给定一个数组  nums ,编写一个函数将所有  0  移动到数组的末尾,同时保持非零元素的相对顺序。 请注意  ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 示例 2: 提示 : 1 = nums.length = 104 -231 = nums[i] = 231 - 1 进阶: 你能尽量减少完成的操作次数吗? 直接采用快

    2024年02月22日
    浏览(31)
  • LeetCode283.移动零

     这道题还是很简单的,我用的是双指针,左指针i从头开始遍历数组,右指针j是从i后面第一个数开始遍历,当左指针i等于0的时候,右指针j去寻找i右边第一个为0的数和i交换位置,交换完了就break内层循环,i往后移1位,j又从i的下一位开始,如果i不等于0,就不用进内层循环

    2024年02月12日
    浏览(34)
  • 【每日一题】Leetcode - 283. 移动零

    Leetcode - 283. 移动零 从右向左遍历,遇到0,就将后面所有元素前移,同时更新长度,使其减1,因为移动n次,倒数n位就被0占据,后续操作可忽略 前面的操作,从右向左,每次遇到0移动都要跑半个数组,慢在整体前移; 换个思路,从左向右,记录首个0的位置,将后面的第一

    2024年02月11日
    浏览(36)
  • 力扣:1089. 复写零

    今日分享一道力扣经典题目,复写0! 题目如下: 题目要求是进行复写0,而且不能超过原数组长度,且只能在原地进行操作! 解决本题最好的方法就是进行双指针方法! 一、双指针算法先 找到最后一个要复写的数 ! 二、然后 从后向前进行完成复写 (因为如果要是从前向

    2024年02月06日
    浏览(23)
  • LeetCode 1089. Duplicate Zeros

    Given a fixed-length integer array  arr , duplicate each occurrence of zero, shifting the remaining elements to the right. Note  that elements beyond the length of the original array are not written. Do the above modifications to the input array in place and do not return anything. Example 1: Example 2: Constraints: 1 = arr.length = 104 0 = arr[i] = 9 这题

    2024年02月11日
    浏览(26)
  • LeetCode —— 复写零(双指针)

    力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 将数组中出现的每个零复写一遍,然后将其他元素向右平移,数组长度不能改变。      

    2024年02月10日
    浏览(30)
  • LeetCode每日一题之 复写0

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

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

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

    2024年02月11日
    浏览(24)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包