删除排序数组中的重复项(I和 II)

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战 本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。 阅读详情

描述
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:

给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

注意在题目当中要求的是:不要使用额外的数组空间,你必须在 原地修改输入数组 并在使用 O(1) 额外空间的条件下完成,意味着不能通过新建数组存放的方式解决,那么对于这样一个问题我们该如何解决呢?

可以考虑增加一个游标的方式(命名为:index),遍历整个数组,当遇到前一个和后一个不相等的时候就给游标自增,这样的话对于相同的元素可以直接跳过不统计,最后返回”游标的大小+1“(也即不重复的元素的个数),代码实现如下:

class Solution
{
public:
    int removeDuplicates(vector<int>& nums)
    {
    if (nums.empty())
        return 0;
        
    int index = 0;
    for (int i = 1; i < nums.size(); i++)
    {
        if (nums[index] != nums[i])
        nums[++index] = nums[i];
    }
    return index + 1;
  }
};

这样的话就符合了题目所要求的各个复杂度以及就地统计的原则,当然,如果你对 STL 比较熟悉的话这道题其实可以偷懒一下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
    	return distance(nums.begin(), unique(nums.begin(), nums.end()));
    }
};

比较容易是不是?我们对题目做一点改变,由于传感器有一个误差的区间,对于所有可能的种类我们允许它最多出现两次,认为是不同的两个种类,这样的话问题该如何解决呢?

由于要求是两次,所以我们可以考虑通过增加一个变量的方式来记录种类编号出现的次数就可以了嘛,代码实现如下:

class Solution {
    public:
    int removeDuplicates(vector<int>& nums) {
    if (nums.size() <= 2)
        return nums.size();
        
    int index = 2;
    for (int i = 2; i < nums.size(); i++){
        if (nums[i] != nums[index - 2])
        nums[index++] = nums[i];
    }
    return index;
    }
};

链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/

《AI编程实战:深度学习模型改进与系统部署》,改进专栏目录和介绍 专深度学习相关项目都写在本专栏,《一次订阅解锁全部,都有源码,永久观看》,包括车牌识别、股票预测、人脸识别、风格迁移、图像修复、图像超分辨重建、图像分割等任务,Web/PyQt系统实现。引入Transformer、Swin Transformer、DenseNet、ViT、ConvNeXt等算法实战,提供卷积改进,魔改对比实验,模型剪枝,模型蒸馏,模型量化,全网独家整合改进专栏,为不同领域的同学发表论文提供了大力支持。 阅读详情

相关推荐

链家二手房信息爬取(内附完整代码)

链家二手房信息爬取1.简介2. 爬虫思路2.1 网页分析2.2 详情页分析2.3 不同页码的爬取2.4 解决链家只显示100页数据2.5 简单的反爬与进度条显示3. 总结 1.简介   最近帮同学爬取了链家在售二手房的信息,这是本人学习爬虫以来爬取数据最多的一次,就想着写个博客记录一下。   本次爬虫是利用python+jupyter notebook实现的,用到的第三方库如下: import pandas as pd # 数据存储 import requests # 网页内容获取 import re #

qq_46256922的博客 3万+

js数组中两个有相同删除一个

for (var i = 0; i < project.Before.length; i++) { var j = 0; for (j = 0; j < data.length; j++) { if (project.Before[i].ProjectBeforeO...

weixin_30845171的博客 405

嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

想要把qt工程放到开发板上运行,就需要用到交叉编译。由于qt是跨平台的,所以只需要换个编译器编译一下就可以。 以“定时器”的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时候,电脑屏幕很大,但是运行的窗口只有一点点大,开发板也有外接屏幕,如何让运行窗口自动适配开发板的外接屏幕呢?令其占满屏幕显示,而不是一小块。 第一步:需要设置一下,先给ui布局,如果不布局,控件就不会随着屏幕的大小的变化而变化。 第二步:利用代码来获取屏幕的大小,给widget.cpp文件下添加如下代码 #inclu

qq_42822743的博客 5457

去除数组中重复元素

统计一个一维数组中的各个元素的个数,然后删除多出来的重复元素,并输出新的数组结果。 例如:[1,2,2,2,3,3,3,3,3]-->[1,2,3]

计算机科学、人工智能、数据分析和大数据方向的研发和教学。 1042

用HFSS仿真平面线圈的电感量

平面线圈是指在平面上绕制而成的线圈,如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈,六角形线圈、八角形线圈、螺旋原型线圈等。

johnboat的专栏 1万+

自动驾驶领域自动化数据标注应用

自动驾驶领域自动化数据标注应用 1. 背景介绍 1.1 自动驾驶技术的发展 自动驾驶技术近年来取得了长足的进步,吸引了众多科技公司和传统车企的投入。自动驾驶系统需要感知周围环境、做出决策并控制车辆,是一个极具挑战的任务。其中,环境感知是自

AI天才研究院 2214

删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums ...

韩绘锦的博客 168

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6808

给定两个数组,将第二个数组与第一个数组重复得元素,从第一个数组中删除。

给定两个数组,将第二个数组与第一个数组重复得元素,从第一个数组中删除。 //定义两个数组 var al=[1,2,3,4,5] var bl=[1,2,6,7,8,4] //定义函数,传入两个参数 var rm=function(al,bl){ var c=bl.length var d=al.length //循环两个数组 for (var i = 0; i<c;i++){ for (var j = 0; j< d;j++){ //判断是否相等

qq_45326728的博客 887

SEGGER Embedded Studio初体验

先楫HPM5E00EVK开发环境搭建

hywing's blog 1109

【AI编程】Cursor编程工具使用教程:下载、配置、使用、运行Java项目

【AI编程】Cursor编程工具使用教程:下载、配置、使用、运行Java项目

funfan的博客 5198

数组去重

1.数组去重是什么意思? 看一下下面这个数组: var arr = [1,2,1,1,3,2]; 很明显的看出这个数组有相同的元素。由此顾名思义可知数组去重是将数组中有相同重复的元素给去掉。2.怎么进行数组去重: 数组去重有多种方法,下面的代码使用了其中一种方法,也就是利用对象的键值对方法。<script> //1.利用对象的键值对方法 //创建一个数组 var t

CoderHenryLee的博客 1607

C#与倍福Plc通信——使用仿真软件模拟倍福PLC运行

安装这个软件之前先安装VisualStudio,本文安装这个软件时已经安装了VisualStudio2019。1、下载倍福PLC编程软件TwinCAT。

qq_34059233的博客 3664

删除排序数组中的重复项 I和II

对后面的每一位进行继续遍历,能够保留的前提是与当前位置的前面 k 个元素不同(答案中的第一个 1),因此我们会跳过剩余的 1,将第一个 2 追加,得到 1,1,2。这时候和答案中的第 1 个 2 比较,只有与其不同的元素能追加到答案,因此剩余的 2 被跳过,3 被追加到答案:1,1,2,2,3。对于后面的任意数字,能够保留的前提是:与当前写入的位置前面的第 k 个元素进行比较,不相同则保留。继续这个过程,这时候是和答案中的第 2 个 1 进行对比,因此可以得到 1,1,2,2。,返回删除后数组的新长度。

weixin_51354231的博客 143

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LeetCode-删除排序数组中的重复项(I,II)与移除元素(26题、27题、80题)

题目描述: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 class Solution { public int removeDuplicates(int[] nums) { int len = nums.length-1; int i=0; while(i<len){ .

Lavender-csdn的博客 163

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

leetcode 26 && 80. 删除排序数组中的重复项(I II) easy

leetcode26. 删除排序数组中的重复项 easy 题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 num...

speargod的博客 215

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

力扣-删除排序数组中的重复项 II关于foreach不能i--的问题

力扣-删除排序数组中的重复项 II关于foreach不能i--的问题

qq_46490956的博客 139

删除排序数组的重复项问题

删除排序数组的重复项问题I , II 删除排序数组的重复项问题I 问题描述 思路分析 代码实现 public static void main(String[] args) { int[] nums = {0,0,1,1,1,2,2,3,3,4}; RemoveDuplicates solution = new RemoveDuplicates(); int count = solution.removeDuplicates(nums);

qq_22993855的博客 296

leetcode-java 删除排序数组的重复项

删除排序数组的重复项 删除排序数组的重复项 I 题目描述: leetcode 26. 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个...

baobaohui 370

c语言编程一、删除数组中重复元素

把一个数组中的重复元素去掉。如a[12]={1,1,2,7,3,2,3,4,5,8,7,7},输出为:1,2,7,3,4,5,8。

m0_68184101的博客 480

ios 数组中的字典排序_LeetCode80.删除排序数组中的重复项 II(Remove Duplicates from Sorted Arr...)...

80. 删除排序数组中的重复项 II给你一个排序数组nums ,原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,须在原数组修改,且额外空间复杂度O(1)。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引...

weixin_40005795的博客 73

LeetCode 20200223(删除排序数组中的重复项II)

1.删除排序数组中的重复项II 其实一遍循环就可以完成 但是要注意的是 nums[i]和nums[k-2]来比较 要思考一下 如果题目变成最多允许重复三次或者不允许重复该怎么写 最多出现三次的话:nums[i]和nums[k-3] 不允许重复的话: nums[i]和nums[k-1] 应该是这样的 class Solution { public: int removeDuplicate...

puying1的博客 152

力扣LeetCode初级算法每日一题

从今天开始坚持每天在LeetCode坚持刷书记算法题有兴趣的小伙伴可以和我一起坚持刷题 Java版本 链接:初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/leetbook/detail/top-interview-questions-easy/买卖股票的最佳时机 II链接:初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/leetbook/detai

weixin_63426509的博客 897

《LeetCode面试刷题》第二篇

题目:1. 第79题 单词搜索2. 第80题 删除排序数组中的重复项 II3. 第81题 搜索旋转排序数组 II4. 第82题 删除排序链表中的重复元素 II5. 第83题 删除排序链表中的重复元素6. 第84题 柱状图中最大的矩形7. 第85题 最大矩形8. 第86题 分隔链表9. 第87题 扰乱字符串10. 第88题 合并两个有序数组11. 第89题 格雷编码 1. 第79题 单词搜索 题目地址 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构

weixin_43795939的博客 286

手撕力扣之双指针:无重复字符的最长子串、 盛最多水的容器、删除排序数组中的重复项I、II、替换空格、合并区间、移动零、二维数组中的查找、和为s的两个数字、调整顺序使奇数位于偶数前面、最大连续1的个数3

力扣026. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 class Solution { public: int removeDuplicates(vector<int>& nums) { if (nums.empty()) return 0; // 别忘记空数组的判断

weixin_39770712的博客 458

应用Vector类接口的算法题

1. 只出现一次的数字i。

2402_87113148的博客 746
上一篇: 一看就懂的贪心算法
下一篇: 美国节日
dreamispossible
博客等级 码龄9年 265粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值