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

80.双指针实现删除有序数组中的重复项 II(中等)-面试经典150题

题目

给你一个有序数组 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。不需要考虑数组中超出新长度后面的元素。

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按升序排列

使用k记录当前后指针q指向的元素值,由于q跳过下标0,所以当前元素k设置为nums[0]

times记录当前k出现次数,当出现的值与前面k值不同(2,2,2,3)3出现时,结束对2的数量统计,并根据k值出现的次数times进行nums[]的更新使用p记录新的数组Nums的最新可写入下标。

由于是出现新的不同值再对新数组进行更新所以最后一组需要循环结束后进行判断更新数组

class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""k=nums[0] #记录当前q指向的元素值,由于q跳过下标0,所以当前元素设置为nums[0]times=1  #记录当前k出现次数,大于二则下一个值p=0 #前指针#起始下标为1,终点下标为len(nums),步长为一,左开右闭for q in range(1,len(nums),1):if nums[q]==k:times+=1elif nums[q]!=k:#当遇到不同时写入前面值if times>=2:nums[p]=knums[p+1]=kp=p+2elif times==1:nums[p]=kp=p+1#k=nums[q]times=1#由于上面时遇到不同时写入前面值,所以五个不同数字只有四次不同,因此会少写入最后一个元素if times==1:nums[p]=kp=p+1else:nums[p]=knums[p+1]=kp=p+2return p

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

相关文章:

  • 基于大数据的B站数据分析系统的设计与实现
  • 机器学习模型预测贷款审批
  • Linux实验记录:使用firewalld
  • Vue之初识Vue CLI 脚手架
  • [Tcpdump] 网络抓包工具使用教程
  • MongoDB常用命令
  • 强敌环伺:金融业信息安全威胁分析——整体态势
  • FreeRTOS简介
  • 51单片机点灯
  • sql注入之union联合注入
  • activiti解决实现ExecutionListener spring 自动注入@Autowired为null问题
  • 【Lazy ORM 整合druid 实现mysql监控】
  • 【Deeplabv3+】Ubutu18.04中使用pytorch复现Deeplabv3+第三步)-----CityscapesScripts生成自己的标签
  • 《动手学深度学习(PyTorch版)》笔记3.3
  • OpenGL ES 渲染 NV21、NV12 格式图像有哪些“姿势”?
  • P8813 [CSP-J 2022] 乘方 题解
  • Ubuntu 常用命令、docker 常用命令、unzip常用命令、tar常用命令
  • 保护医疗数据不受威胁:MPLS专线在医疗网络安全中的角色
  • Java面试题夺命连环问
  • 华为策略路由+NQA配置
  • 逆置字符串
  • 第九节HarmonyOS 常用基础组件14-DataPanel
  • Vue开发之proxy代理的配置(附带uniapp代理配置)
  • 【数据分享】2023年我国省市县三级的公司企业数量(21类公司企业/Excel/Shp格式)
  • 6JS对象
  • 粒子群算法求解港口泊位调度问题(MATLAB代码)
  • idea控制台出现乱码的解决方案
  • R语言【taxlist】——summary(),show(),print():打印taxlist对象及其内容的概述
  • 【深度学习】sdxl中的 text_encoder text_encoder_2 区别
  • 上位机图像处理和嵌入式模块部署(python opencv)