力扣80、删除有序数组中的重复项Ⅱ(中等)

news2024/11/16 15:38:44

1 题目描述

图1 题目描述

2 题目解读

        对于有序数组nums,要求在不使用额外数组空间的条件下,删除数组nums中重复出现的元素,使得nums中出现次数超过两次的元素只出现两次。返回删除后数组的新长度。

3 解法一:双指针

        双指针法可以很好地解决此题。

3.1 解题思路

        设置双指针,从数组nums的第3个元素开始比较,直到nums的最后一个元素。

3.2 设计代码

#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if (n <= 2) {
            return n;
        }
        int slow = 2, fast = 2;
        while (fast < n) {
            if (nums[slow - 2] != nums[fast]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
};
int main() {
    int x[] = { 1,1,1,2,2,3 };
    vector<int> nums;
    for (int i = 0; i < 6; i++)
    {
        nums.push_back(x[i]);
    }
    Solution S;
    int ans = S.removeDuplicates(nums);
    cout << ans << endl;
    return 0;
}

3.3 复杂度分析

  • 时间复杂度:O(n)。while循环遍历了一遍数组元素。
  • 空间复杂度:O(1)。没有使用额外数组空间。

3.4 提交结果

图2 双指针法代码执行结果

4 解法二:前移法

        前移法是由双指针法扩展出来的一种方法,与双指针法有着相似的思想。

4.1 解题思路

        设置指针right,从数组nums的第3个元素开始遍历,使用变量k记录需要移除的元素的个数,将需要移动的元素前移k个位置。

4.2 设计代码

#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if (n <= 2) {
            return n;
        }
        // k累计删除的元素个数
        int fast = 2, k = 0;
        while (fast < n) {
            if (nums[fast - k - 2] != nums[fast]) {
                nums[fast - k] = nums[fast];
            }
            else {
                ++k;
            }
            ++fast;
        }
        return fast - k;
    }
};
int main() {
    int x[] = { 1,1,1,2,2,3 };
    vector<int> nums;
    for (int i = 0; i < 6; i++)
    {
        nums.push_back(x[i]);
    }
    Solution S;
    int ans = S.removeDuplicates(nums);
    cout << ans << endl;
    return 0;
}

4.3 复杂度分析

  • 时间复杂度:O(n)。while循环遍历了一遍数组nums的元素。
  • 空间复杂度:O(1)。没有使用额外数组空间。

4.4 提交结果

图3 前移法代码执行结果

5 解题心得

  • 让有序数组nums中重复出现的元素只出现两次,是让其只出现一次的变体题目,难度更大。
  • 双指针法与前移法之间,可以相互转换。
  • 双指针法中,left指针用于放置新元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1411302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享7种SQL的进阶用法

分享7种SQL的进阶用法 前言 还只会使用SQL进行简单的insert、update、detele吗&#xff1f;本文给大家带来7种SQL的进阶用法&#xff0c;让大家在平常工作中使用SQL简化复杂的代码逻辑。 1.自定义排序&#xff08;ORDER BY FIELD&#xff09; 在MySQL中ORDER BY排序除了可以…

HNSW算法

From&#xff1a; HNSW算法(nsmlib/hnswlib)-CSDN博客HNSW算法的基本原理及使用 - 知乎 HNSW是一种广泛使用的ANN图索引结构&#xff0c;包括DiskANN、DF-GAS、SmartSSD等。本文档主要总结HNSW的结构与工作流程&#xff0c;便于后期研究其工作流程在迁移到CSD中存在的I/O问题…

【LeetCode: 148. 排序链表 + 链表 + 归并排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

防火墙源NAT配置

拓扑 需求 生产区在工作时间内可以访问服务器区&#xff0c;仅可以访问HTTP服务器。办公区全天可以访问服务区&#xff0c;其中&#xff0c;10.0.2.20可以访问FTP服务器和HTTP服务器 10.0.2.10仅可以ping通10.0.3.10办公区在访问服务区时采用匿名认证方式进行上网行为管理。办…

SAP创建资产号码和分配资产价值

文章目录 1 Creat new asset2 View asset3 Create old asset4 Transfer value5 Summary 1 Creat new asset T-code(AS01) 2 View asset T-CODE : AS03 3 Create old asset T-code(as91) 4 Transfer value T-code(ABLDT) If there is following information a…

双向队列的创建队首与队尾的操作deque()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 双向队列的创建 队首与队尾的操作 deque() [太阳]选择题 请问以下代码输出的结果是&#xff1f; from collections import deque print("【创建双向队列】d deque()") d deque(…

[Python] 机器学习 - 常用数据集(Dataset)之鸢尾花(Iris)数据集介绍,数据可视化和使用案例

鸢(yuān)尾花(Iris)数据集介绍 鸢【音&#xff1a;yuān】尾花&#xff08;Iris&#xff09;是单子叶百合目花卉&#xff0c;是一种比较常见的花&#xff0c;而且鸢尾花的品种较多&#xff0c;在某个公园里你可能不经意间就能碰见它。 鸢尾花数据集最初由Edgar Anderson 测量…

LeetCode 热题 100 | 子串

目录 1 560. 和为 K 的子数组 2 239. 滑动窗口最大值 3 76. 最小覆盖子串 菜鸟做题第二周&#xff0c;语言是 C 1 560. 和为 K 的子数组 题眼&#xff1a;“子数组是数组中元素的连续非空序列。” 解决本问题的关键就在于如何翻译问题。子数组 s 的和可以看作数组 i 的…

手撕重采样,考虑C的实现方式

一、参考文章&#xff1a; 重采样、上采样、下采样 - 知乎 (zhihu.com) 先直接给结论&#xff0c;正常重采样过程如下&#xff1a; 1、对于原采样率fs&#xff0c;需要重采样到fs1&#xff0c;一般fs和fs1都是整数哈&#xff0c;则先找fs和fs1的最小公倍数&#xff0c;设为m…

WordPress反垃圾评论插件Akismet有什么用?如何使用Akismet插件?

每次我们成功搭建好WordPress网站后&#xff0c;都可以在后台 >> 插件 >> 已安装的插件&#xff0c;在插件列表中可以看到有一个“Akismet反垃圾邮件&#xff1a;垃圾邮件保护”的插件&#xff08;个人觉得是翻译错误&#xff0c;应该是反垃圾评论&#xff09;。具…

【新书推荐】3.4 浮点型

本节必须掌握的知识点&#xff1a; 示例九 代码分析 汇编解析 浮点数的输出精度 【补充内容】 3.4.1 示例九 浮点型分为&#xff1a;单精度float、双精度double、长双精度long double。 类型 存储大小 值范围 精度 单精度 float 4字节 【1.2E-38~ 3.4E38】 6位小数 …

SpringMVC-对静态资源的访问

1.工程中加入静态资源 在webapp下创建static文件夹&#xff0c;此文件夹专门放入静态资源 2.使项目可以处理静态资源的请求 在SpringMVC配置文件中添加以下语句 1.引入命名空间 xmlns:mvc"http://www.springframework.org/schema/mvc" xsi:schemaLocation“http…

HarmonyOS鸿蒙学习笔记(23)监听Wifi状态变化

监听Wifi状态变化 前言创建接收状态变化的Bean对象创建订阅者和订阅事件参考资料&#xff1a; 前言 本篇博文通过动态订阅公共事件来说明怎么使用HarmonyOS监听Wifi状态的变化。关于动态订阅公共事件的概念&#xff0c;官网有详细说明&#xff0c;再次就不在赘述。博文相关项目…

UE5 Chaos系统 学习笔记

记得开插件&#xff1a; 1、锚点场 在锚点场范围内的物体静止且不被其他力场损坏 2、ClusterStrain 破裂效果的力 3、DisableField chaos破裂后的模拟物理在绿色范围内禁止模拟物理 4、ForceAndStrain 破裂效果的力 5、ForceAndStrainFallOff 破裂效果的力&#xff0c;但是…

代码随想录算法训练营第十一天 | 二叉树基础

代码随想录算法训练营第十一天 | 二叉树基础 文章目录 代码随想录算法训练营第十一天 | 二叉树基础1 二叉树的理论基础1.1 二叉树的类型1.2 二叉树的存储方式1.3 二叉树的遍历方式1.4 二叉树的定义 2 二叉树的递归遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历 3 二叉树的迭代遍历…

【QT+QGIS跨平台编译】之十:【libbz2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libbz2介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libbz2介绍 bzip2是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。它是一款免费软件。可以自由分发免费使用。 bzip2能够进行高质量的数据压缩。它利用…

SpringBoot-yml文件的配置与读取

配置 值前边必须要有空格&#xff0c;作为分隔符 使用空格作为缩进表示层级关系&#xff0c;相同的层级左侧对齐 获取 使用Value(”${键名}”) 使用ConfigurationProperties(prefix "前缀") 1.前缀要与yml配置文件中的前缀一致 2.实体类的字段名与配置文件中的键名一…

linux conda 配置 stable video diffusion

安装教程 1 下载仓库源码 git clone https://github.com/Stability-AI/generative-models.git2 创建conda环境 conda create -n svd python3.10 conda activate svd3 安装pytorch gpu cuda和cudnn请参考其他链接配置&#xff0c;使用 conda 或者 pip 安装 pytorch # 使用c…

第二集《闻法仪轨》

请大家打开讲义第三面&#xff0c;甲二、于法、法师发起承事。 我们身为一个大乘的佛弟子&#xff0c;我们这一念明了的心&#xff0c;在一生当中&#xff0c;会遇到很多很多的佛法&#xff0c;也会遇到很多很多的法师&#xff0c;但不是所有的法师跟佛法对我们都是帮助的&…

EasyCVR视频智能监管系统方案设计与应用

随着科技的发展&#xff0c;视频监控平台在各个领域的应用越来越广泛。然而&#xff0c;当前的视频监控平台仍存在一些问题&#xff0c;如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果&#xff0c;也制约了视频监控平台的发展。 为了解决这些问…