leetcode第二十六题:删去有序数组的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案int k = removeDuplicates(nums); // 调用assert k == expectedNums.length;
for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么您的题解将被 通过

示例 1:

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

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按 非严格递增 排列

步骤1:问题性质分析

  • 问题类型:本题属于数组处理与去重问题。
  • 输入条件
    • 一个已经 非严格递增排列 的数组 nums(可以有重复元素)。
    • nums.length 范围:1 <= nums.length <= 3 * 10^4
    • nums 的元素值范围:-10^4 <= nums[i] <= 10^4
  • 输出条件
    • 返回去重后的新长度 k,并确保数组 nums 的前 k 个元素是唯一的,且顺序与原数组一致。
    • 数组中超过 k 个位置的元素无需考虑。
  • 限制
    • 必须原地修改数组,不能使用额外空间。

边界条件

  1. 如果数组 nums 为空(虽然输入约束不会出现这种情况),直接返回 0
  2. 如果数组没有重复元素,直接返回数组的长度 k = nums.size()
  3. 如果数组所有元素都相同,返回 1,因为所有元素去重后只会剩下一个。

步骤2:算法分解和分析

我们可以使用双指针法来解决这个问题,时间复杂度为 O(n),空间复杂度为 O(1)。这种算法在本题非常高效,适合处理大规模数据。

双指针法步骤:

  • 设定两个指针:

    1. slow 指针,用于标记不重复元素的存储位置。
    2. fast 指针,用于扫描整个数组。
  • 算法逻辑:

    1. 初始时,slow = 0fast = 1
    2. 遍历数组 nums,如果 nums[fast] != nums[slow],说明遇到了新的唯一元素:
      • 增加 slow 指针并更新 nums[slow] = nums[fast]
    3. 如果 nums[fast] == nums[slow],则跳过该元素,fast 继续前进。
  • 时间复杂度

    • 双指针每个元素最多访问一次,因此时间复杂度为 O(n)。
  • 空间复杂度

    • 只使用常量级别的额外空间,空间复杂度为 O(1)。

详细步骤:

  1. 初始化 slowfast 指针。
  2. 使用 fast 遍历数组,每当遇到与 slow 不同的元素时,slow 增加并更新值。
  3. 最终返回 slow + 1,即唯一元素的数量。

步骤3:C++代码实现

步骤4:算法的启发

通过解决此问题,我们可以从以下几方面获得启发:

  1. 双指针技术:双指针是一种高效的遍历和处理数组的方法,尤其适合处理排序好的数组以及类似的连续数据结构。这种技术能显著提高算法的效率。
  2. 原地修改:在大规模数据集处理时,减少额外的空间消耗是一个关键的优化点,尤其在实际生产环境中,当内存有限时,原地修改的算法更加高效。
  3. 时间复杂度的优化:在需要线性扫描问题时,双指针法通过尽可能减少遍历的次数,有助于控制时间复杂度为 O(n)。

步骤5:实际生活中的应用

这个算法能够在实际生活中起到非常重要的作用,尤其是处理去重和排序的问题。常见应用场景包括:

  • 物流优化:在物流行业,运送物品时可能会遇到大量重复的订单或货物,去重算法可以帮助优化配送计划,确保只运输不同的物品。

    • 实际例子:某个仓库每天接收到多个订单,但其中有许多是重复订单。使用类似的算法去重后,可以减少运输车辆的出行次数,提升运输效率,并节省成本。
  • 金融数据去重:在金融领域,投资组合、股票交易数据等常常需要去除重复的历史记录,以进行后续的分析和预测。

    • 实际例子:某金融公司需要分析过去一年股票交易的历史数据,但这些数据中包含许多重复的记录。使用去重算法可以有效简化数据集,减少计算时间,提高预测模型的准确性。

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

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

相关文章

Rasa对话模型——做一个语言助手

1、Rasa模型 1.1 模型介绍 Rasa是一个用于构建对话 AI 的开源框架&#xff0c;主要用于开发聊天机器人和语音助手。Rasa 提供了自然语言理解&#xff08;NLU&#xff09;和对话管理&#xff08;DM&#xff09;功能&#xff0c;使开发者能够创建智能、交互式的对话系统。 1.2…

Eclipse 工作空间

Eclipse 工作空间 Eclipse 工作空间(Workspace)是 Eclipse IDE 中一个核心概念,它指的是一个用于组织和存储开发项目及相关文件的目录。在 Eclipse 中,所有开发活动都是围绕工作空间展开的。本文将详细介绍 Eclipse 工作空间的概念、配置、使用方法,以及如何通过优化工作…

Apache Iceberg 数据类型参考表

Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型&#xff0c;表示真或假true, false用于条件判断&#xff0c;例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合&#xf…

【系统架构设计师】专题:中间件技术

更多内容请见: 备考系统架构设计师-核心总结目录 文章目录 一、中间件概述二、中间件特点三、中间件的分类四、中间件产品介绍一、中间件概述 中间件(middleware) 是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处在操作系统、网络和数据库之上,应用软件的下层…

着色器ShaderMask

说明 实现一个渐变进度条&#xff0c;要求&#xff1a; 颜色渐变的过程是循序渐进的&#xff0c;而不是看起来像是将渐变条逐渐拉长了。 效果 源码 // 渐变进度条Stack(children: [// 背景色板Container(width: 300,height: 8,decoration: BoxDecoration(borderRadius: Bord…

vue2知识汇总

vue2.x 0. 参考文档 https://cn.vuejs.org/v2/api/https://cn.vuejs.org/v2/guide/1. 发展历程 2014.2 诞生 2015.10 vue1.0发布 2016.4 vue2.0发布预览版&#xff0c; 10月出正式版本 2020.4 vue3.0发布预览版 9.18正式版本2. 概述 声明式渲染 --- 组件系统 ---…

ollama 部署教程(window、linux)

目录 一、官网 二、安装方式一&#xff1a;window10版本下载 三、安装方式二&#xff1a;linux版本docker 四、 模型库 五、运行模型 六、API服务 七、python调用 ollama库调用 langchain调用 requests调用 aiohttp调用 八、模型添加方式 1.线上pull 2.导入 GGU…

Parallels Desktop 20 for Mac 推出:完美兼容 macOS Sequoia 与 Win11 24H2

Parallels Desktop 20 for Mac 近日正式发布&#xff0c;这一新版本不仅全面支持 macOS Sequoia 和 Windows 11 24H2&#xff0c;还在企业版中引入了一个全新的管理门户。新版本针对 Windows、macOS 和 Linux 虚拟机进行了多项改进&#xff0c;其中最引人注目的当属 Parallels …

【AI写作】介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用

【AI写作】介绍 Docker 的基本概念和优势&#xff0c;以及在应用程序开发中的实际应用 浅浅的玩一下这个 AI 写作&#xff0c;本内容全为 AI 生成&#xff0c;仅为 AI 观点&#xff0c;无作者本人的观点。 Docker是一个开源的容器化平台&#xff0c;它可以轻松地将应用程序及…

C++编程语言:基础设施:源文件和程序(Bjarne Stroustrup)

第15章 源文件和程序 (Source Files and Programs) 目录 15.1 单独编译(Separate Compilation) 15.2 链接(Linkage) 15.2.1 文件局部名(File-Local Names) 15.2.2 头文件(Header Files) 15.2.3 一次定义原则(The One-Definition Rule) 15.2.4 标准库头文件 1…

基于YOLOv8+LSTM的商超扶梯场景下行人安全行为姿态检测识别

基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别 手扶电梯 行为识别 可检测有人正常行走&#xff0c;有人 跌倒&#xff0c;有人逆行三种行为 跌倒检测 电梯跌倒 扶梯跌倒 人体行为检测 YOLOv8LSTM。 基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别&#xf…

STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)

在研究声音、电力或任何形式的波形时&#xff0c;我们常常需要穿过表面看本质。FFT&#xff08;快速傅里叶变换&#xff09;就是这样一种强大的工具&#xff0c;它能够揭示隐藏在复杂信号背后的频率成分。本文将带你走进FFT的世界&#xff0c;了解它是如何将时域信号转化为频域…

力扣(leetcode)每日一题 815 公交路线 (图的宽度优先遍历变种)

815. 公交路线 - 力扣&#xff08;LeetCode&#xff09; 题干 给你一个数组 routes &#xff0c;表示一系列公交线路&#xff0c;其中每个 routes[i] 表示一条公交线路&#xff0c;第 i 辆公交车将会在上面循环行驶。 例如&#xff0c;路线 routes[0] [1, 5, 7] 表示第 0 辆…

如何将Excel表格嵌入Web网页在线预览、编辑并保存到自己服务器上?

猿大师办公助手作为一款专业级的网页编辑Office方案&#xff0c;不仅可以把微软Office、金山WPS和永中Office的Word文档内嵌到浏览器网页中实现在线预览、编辑保存等操作&#xff0c;还可以把微软Office、金山WPS和永中Office的Excel表格实现网页中在线预览、编辑并保存到服务器…

python中ocr图片文字识别样例(二)

一、说明 本次解决图片相关出现中文乱码问题&#xff0c;属于上篇文章的优化&#xff0c;前提条件依赖上篇文章的包&#xff0c;当然ocr的具体应用场景很多&#xff0c;根据自身需求进行调整 二、具体实现 2.1 代码实现&#xff1a; # -*- coding: utf-8 -*- import easyoc…

3.《DevOps》系列K8S部署CICD流水线之部署MetalLB负载均衡器和Helm部署Ingress-Nginx

架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 为什么使用MetalLB 当使用云平…

内网穿透软件有哪些?

目录 神卓互联 花生壳 FRP Ngrok Cpolar Lanproxy 小蚂蚁 内网穿透软件是帮助用户实现从外部网络访问内部网络资源的工具&#xff0c;这对于远程办公、网络调试、私有项目展示等方面非常有用。以下是一些常用的内网穿透软件&#xff1a; 神卓互联 神卓互联&#xff1a…

【Nginx】Nginx 监控详解

目录 一、Nginx 监控的重要性二、Nginx 监控的方法2.1 使用 Nginx 自带的状态模块2.2 使用日志分析2.3 监控工具 三、监控指标四、可能出现的情况及处理4.1 高负载4.2 错误日志增多4.3 资源瓶颈 总结 Nginx 是一个高性能的 HTTP 服务器和反向代理服务器&#xff0c;广泛应用于现…

在vue中:style 的几种使用方式

在日常开发中:style的使用也是比较常见的&#xff1a; 亲测有效 1.最通用的写法 <p :style"{fontFamily:arr.conFontFamily,color:arr.conFontColor,backgroundColor:arr.conBgColor}">{{con.title}}</p> 2.三元表达式 <a :style"{height:…

如何快速连接超2100家国内外快递物流公司、实现查询结果翻译为中/英文?

近年来&#xff0c;中国企业正不断加快“出海”步伐&#xff0c;“中企出海”也成为了2024年最重要的投资主题之一。 百递云API开放平台深刻理解这一趋势&#xff1a;在我们的客户群体中&#xff0c;既有贸易规模增长超数倍的跨境电商&#xff0c;还有国际业务越来越成为增长新…