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

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

目录

283. 移动零

描述

 解析

代码

1089. 复写零

描述

解析

代码


283. 移动零

283. 移动零icon-default.png?t=N7T8https://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处理完数组的最后一个数字。

代码

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. 复写零icon-default.png?t=N7T8https://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.“从后往前”完成复写操作

代码

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--;}}
};

相关文章:

  • ArkUI Button组件
  • 中国区县人工智能企业数量,shp/excel格式,数据全,覆盖2010-2023年
  • Redis高效恢复策略:内存快照与AOF
  • 虹科Pico汽车示波器 | 汽车免拆检修 | 2018款东风风神AX7车发动机怠速抖动、加速无力
  • nvm动态管理node.js
  • 网络层重点协议——IP协议详解
  • 论jenkins的使用方法(初步)
  • CESM笔记——component活动状态+compset前缀解析+B1850,BHIST区别
  • Spring JDBC和事务管理
  • Python实现获取b站视频的弹幕内容
  • 想学编程,但不知道从哪里学起,应该怎么办?
  • TCP对数据的拆分
  • 软件设计模式原则(四)里氏替换原则
  • 本地如何使用PHP搭建简单Imagewheel云图床,结合内网穿透实现在外远程访问?
  • SpringCloud | Dubbo 微服务实战——注册中心详解
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 78. Subsets
  • bootstrap创建登录注册页面
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Logstash 参考指南(目录)
  • mysql_config not found
  • PAT A1120
  • rc-form之最单纯情况
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue UI框架库开发介绍
  • 通信类
  • 用Canvas画一棵二叉树
  • ​如何防止网络攻击?
  • #{} 和 ${}区别
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (2020)Java后端开发----(面试题和笔试题)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (笔试题)合法字符串
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四) 虚拟摄像头vivi体验
  • .Net 8.0 新的变化
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 读取 JSON格式的数据
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net反编译工具
  • .net中我喜欢的两种验证码
  • @EnableWebMvc介绍和使用详细demo
  • @javax.ws.rs Webservice注解
  • [04]Web前端进阶—JS伪数组
  • [2021 蓝帽杯] One Pointer PHP
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [Bugku]密码???[writeup]
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [javaSE] 看知乎学习工厂模式
  • [LeetCode] Sort List