1002-补打卡-leetcode打卡,有序数组去除重复出现超过2次的元素

embedded/2024/10/18 16:03:15/
  1. 删除有序数组中的重复项 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。不需要考虑数组中超出新长度后面的元素。

提示:

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

答案

class Solution {
public int removeDuplicates(int[] nums) {
// 数组中的一号和二号元素肯定不用删除
int count = 2;
for(int i = 2 ; i < nums.length ; i++) {
if(nums[i] != nums[count-2]) {
nums[count++] = nums[i];
}
}
return count;
}
}

我一开始想写for循环,想着怎么删除数组数据,写一个变量统计当前数字出现次数,看了答案,这种有序数组的,直接用游标法就可以了,上面标准答案中count就是游标,而且当题目改为出现超过k次时也是可以支持的 将2 的地方改为变量

class Solution {
public int removeDuplicates(int[] nums) {
// 数组中的一号和二号元素肯定不用删除
k = 2;
int count = k;
for(int i = k ; i < nums.length ; i++) {
if(nums[i] != nums[count-k]) {
nums[count++] = nums[i];
}
}
return count;
}
}


http://www.ppmy.cn/embedded/126955.html

相关文章

JAVA Web(学习笔记)

HTTP HTTP信息头&#xff0c;也成为头字段或部首&#xff0c;是构成HTTP报文的要素之一&#xff0c;具有传递额外重要信息的作用。 HTTP信息头通常包括4类&#xff1a; 请求头(Request Header)响应头(Response Header)通用头实体头 请求头是从客户端向服务器发送请求报文时所用…

开源一个C缓存库

简介 在当下的视频点播应用场景下&#xff0c;端侧对视频缓存的需求可谓刚需&#xff0c;一方面可以为公司节省流量成本&#xff0c;一方面可以提升用户的播放体验&#xff0c;有一石二鸟之效。 近期&#xff0c;本人用C写了一个缓存库&#xff0c;支持iOS/Android/harmony系统…

无序中的秩序:Transformer模型的创新性结构解析

最近我在看论文时&#xff0c;发现很多都在用 Transformer 模型&#xff0c;我知道transformer很有名&#xff0c;但是我也只是听说过他的大名&#xff0c;不知道他具体是做什么怎么做的&#xff0c;因此我决定深入了解一下&#xff0c;并做个简单记录&#xff0c;方便以后参考…

【Fargo】1:基于libuv的udp收发程序

开发UDP处理程序 我正在开发一个基于libuv的UDP发送/接收程序,区分发送端和接收端,设计自定义包数据结构,识别和处理丢包和乱序。 创建项目需求 用户正在要求一个使用libuv的C++程序,涉及UDP发送和接收,数据包包括序列号和时间戳,接收端需要检测丢包和乱序包。 撰写代…

JavaSE——集合4:LinkedList、ArrayList与LinkedList的选择

目录 一、LinkedList的全面说明 二、LinkedList的底层操作机制 (一)LinkedList添加结点源码 (二)LinkedList删除结点源码 三、LinkedList常用方法 四、ArrayList与LinkedList的选择 一、LinkedList的全面说明 LinkedList底层实现了双向链表和双端队列的特点可以添加任意…

计组_输入输出系统

2024.08.05&#xff1a;计算机组成原理输入输出学习笔记 第25节 输入输出系统 5.1 IO基本职能5.2 IO接口的通用结构5.3 IO数据传送控制方式5.3.1 程序直接控制&#xff08;程序查询控制&#xff09;&#xff08;1&#xff09;独占查询&#xff08;2&#xff09;定时查询 5.3.2 …

Spring Boot知识管理系统:敏捷开发实践

3系统分析 3.1可行性分析 通过对本知识管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本知识管理系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

使用SIFT算法实现可缩放比例的图像匹配:Python与OpenCV

使用SIFT算法实现强大的图像匹配&#xff1a;Python与OpenCV实战指南 在计算机视觉领域,图像匹配是一个常见而重要的任务。无论是在图像拼接、对象识别还是视觉跟踪中,我们都需要可靠的方法来找出一个图像在另一个图像中的位置。今天,我们将探讨一种强大的技术 —— SIFT(尺度…