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

每日OJ题_算法_双指针_力扣283. 移动零+力扣1089. 复写零

力扣283. 移动零

283. 移动零 - 力扣(LeetCode)

难度 简单

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

进阶:你能尽量减少完成的操作次数吗?

class Solution {
public:void moveZeroes(vector<int>& nums) {}
};

解析代码

经典的双指针问题(数组的双指针问题就是运用下标模拟指针):

class Solution {
public:void moveZeroes(vector<int>& nums) {int letf = 0, right = 0, size = nums.size();while(right < size){if(nums[right] != 0){swap(nums[letf++], nums[right]);}++right;}}
};

力扣1089. 复写零

1089. 复写零 - 力扣(LeetCode)

难度 简单

给你一个长度固定的整数数组 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 <= arr.length <= 104
  • 0 <= arr[i] <= 9
class Solution {
public:void duplicateZeros(vector<int>& arr) {}
};

解析代码

从右往前的双指针问题(标的简单实际并不简单),需要先找到最后得到的vector最右边的数。这里找这个数用从左向右的双指针:

class Solution {
public:void duplicateZeros(vector<int>& arr) {int left = -1, right = 0, size = arr.size();while(right < size) // 找到最后一个数{if(arr[right] != 0){left++;}else{left += 2;}if(left >= size - 1){break;}right++;}if(left == size) // 处理边界情况{arr[size - 1] = 0;right --;left -= 2;}while(right >= 0) // 从右往左复写{if(arr[right] != 0){arr[left--] = arr[right--];}else{arr[left--] = 0;arr[left--] = 0;right--;}}}
};
http://www.lryc.cn/news/235063.html

相关文章:

  • WebGl-Blender:建模 / 想象成形 / Blender概念词汇表 / 快捷键
  • 【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能
  • WPF实现右键菜单
  • Java智慧工地SaaS管理平台源码:AI/云计算/物联网
  • 【漏洞复现】通达oa 前台sql注入
  • 机器学习笔记 - Ocr识别中的文本检测EAST网络概述
  • 【SQL server】数据库、数据表的创建
  • vue的生命周期分别是什么?
  • Java拼图游戏
  • Vue框架的element组件table文字居中
  • 科技创新 共铸典范 | 江西卫健办邓敏、飞图影像董事长洪诗诗一行到访拓世科技集团,提振公共卫生事业发展
  • Linux安装OpenCV并配置VSCode环境
  • Django(ORM事务操作|ORM常见字段类型|ORM常见字段参数|关系字段|Meta元信息)
  • 【mujoco】Ubuntu20.04配置mujoco210
  • 【洛谷 P3853】[TJOI2007] 路标设置 题解(二分答案+循环)
  • 蓝桥杯 vector
  • ai绘画部署教程
  • 策略模式的应用——应对频繁的需求变更
  • qt-C++笔记之treeWidget初次使用
  • SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(八)
  • C语言编程陷阱(八)
  • 客户端性能优化实践
  • mysql使用--表达式和函数
  • <蓝桥杯软件赛>零基础备赛20周--第6周--数组和队列
  • 软件开发、网络空间安全、人工智能三个方向的就业和前景怎么样?哪个方向更值得学习?
  • 新增文章分类
  • 选硬币该用动态规划
  • LeetCode 2342. 数位和相等数对的最大和:哈希表
  • Vulkan渲染引擎开发教程 一、开发环境搭建
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程