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

力扣 --- 删除有序数组中的重复项 II

题目描述:

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}

示例 1:

输入:nums = [1,1,1,2,2,3]
输出:5, nums = [1,1,2,2,3]
解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,1,2,3,3]
输出:7, nums = [0,0,1,1,2,3,3]
解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。

思路描述:

        对于这个题目来说,我们可以设置两个指针,即双指针,一个指针指向,满足题意的数组范围的右边界,另一个指针,指向数组中的索引从前往后遍历。后一个指针遍历完数组,说明算法结束。

代码:

class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=2){return len;}int slow=2,fast=2;while(fast<len){if(nums[slow-2]!=nums[fast]){nums[slow]=nums[fast];slow++;}fast++;}return slow;}
}

提交结果:

http://www.lryc.cn/news/249243.html

相关文章:

  • Opencv图像处理(全)
  • Flutter桌面应用开发之毛玻璃效果
  • 基于C#实现优先队列
  • ssm+vue的仓库在线管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。
  • 什么是木马
  • Pinia仓库统一管理
  • [论文阅读]VoxSet——Voxel Set Transformer
  • 【开源】基于Vue.js的医院门诊预约挂号系统的设计和实现
  • 1、Mysql架构与历史
  • 考试复习
  • 使用Docker一键安装MySQL与Nginx脚本
  • VMware系列:Vmware vSphere常见问题及解决办法
  • 基于web宠颐生宠物医院系统设计与实现
  • 二、Gitee使用方法
  • 【C++】string模拟
  • python高级练习题库实验1(A)部分
  • 数据库应用:MongoDB 数据备份与恢复
  • MySQL-函数
  • 【12】Python函数专题(下)
  • 国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新
  • 生成式AI与预测式AI的主要区别与实际应用
  • 【JavaEE】多线程 -- 死锁问题
  • XTU OJ 1339 Interprime 学习笔记
  • 【Web安全】xss攻击方式与绕过
  • 文件夹重命名技巧:用关键词替换文件夹名称指定内容的右侧文字
  • python pip安装第三方包时报错 error: Microsoft Visual C++ 14.0 or greater is required.
  • 对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思
  • HCIA-RS基础-静态路由协议
  • LeetCode(46)汇总区间【区间】【简单】
  • 数据预处理:随机裁剪放缩