java数据结构与算法刷题-----LeetCode26:删除有序数组中的重复项

LeetCode 第26题:删除有序数组中的重复项 今天,我们深入解析了LeetCode第26题——删除有序数组中的重复项。通过引入双指针法,我们成功地实现了在原地删除数组中的重复项,使每个元素只出现一次。这个过程就像是在有序队列中整理队伍,每一步都充满了算法的乐趣和智慧。在解题过程中,我们不仅掌握了数组操作的技巧,还体验了算法世界的奇妙。希望大家通过这篇文章,对数组操作和算法设计有更深的理解,也能在实际编程中应用这些技巧,解决更多有趣的问题。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 思路分析

看下面代码注释

  1. 代码
    在这里插入图片描述
class Solution {
    /**left每次指向重复元素的,应该替换的元素的位置,right是最新的不重复元素的位置
     * 下面这个便于大家理解怎么换,我将重复元素和非重复元素换了位置,但是这种会无法处理其它的一些情况
     * [1,1,1,2,3,5,8,11]
     * left每次指向重复元素的位置,right是最新的位置
     * [1,2,1,1,3,5,8,11]
     * [1,2,3,1,1,5,8,11]
     * [1,2,3,5,1,1,8,11]
     * [1,2,3,5,8,1,1,11]
     * [1,2,3,5,8,11,1,1]
     *
     * 我们不可以移动元素,只能让右边的替换左边的重复元素,就像下面这样
     * [1,1,1,2,2,2,3,5,8,11]
     * [1,2,1,2,2,2,3,5,8,11]
     * [1,2,3,2,2,2,3,5,8,11]
     * [1,2,3,5,2,2,3,5,8,11]
     * [1,2,3,5,8,2,3,5,8,11]
     * [1,2,3,5,8,11,3,5,8,11],到这里,right就已经越界了
     */
    public int removeDuplicates(int[] nums) {
        int left = 1;
        int right = 1;
        while(right<nums.length){
            if(nums[right]!=nums[right-1]){
                nums[left++] = nums[right];
            }
            right++;
        }
        return left;
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  4. 差分数组:对差分数组求前缀和即可得到原数组
  1. 用差值,作为下标,节省空间找东西。比如1900年到2000年,就可以定义100大小的数组,每个数组元素下标的查找为1900。
  2. 前缀和数组,对于数组 [1,2,2,4],其差分数组为 [1,1,0,2],差分数组的第 ii个数即为原数组的第 i-1 个元素和第 i个元素的差值,也就是说我们对差分数组求前缀和即可得到原数组
  1. 前缀和:假设有一个数组arr[1,2,3,4]。然后创建一个前缀和数组sum,记录从开头到每个元素区间的和。第一个元素是0。第二个元素,保存第一个和sum[1] = sum[0]+arr[0],第二个元素,保存第二个和sum[2] = sum[1]+arr[1]
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
【简单】力扣算法题解析LeetCode26:删除有序数组中的重复项 要求原地删除非严格递增数组中的重复元素,并返回唯一元素的个数。使用双指针法(快慢指针)高效解决:慢指针slow标记唯一序列末尾,快指针fast遍历数组。当nums[fast]与nums[slow]不同时,将fast的值赋给slow+1位置。最终返回slow+1作为唯一元素数量。该算法时间复杂度O(n),空间复杂度O(1),满足原地修改要求。代码简洁高效,适用于有序数组去重场景。 阅读详情

相关推荐

大模型事件抽取学习——论文学习笔记《LLMs Learn Task Heuristics from Demonstrations:......》

本篇博客介绍一篇发表在2024 ACL main上的文章:《LLMs Learn Task Heuristics from Demonstrations: A Heuristic-Driven Prompting Strategy for Document-Level Event Argument Extraction》 方向:大模型事件抽取 本篇博客为个人阅读论文的总结与笔记,在这里进行简单的分享 论文链接:https://arxiv.org/abs/

weixin_53751318的博客 1852

leetCode26题::java

前言 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,*那么 nums 的前 k 个元素应该保存最终结果。*将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 正文 思路:

qq_43728862的博客 285

倍福TwinCAT3 OPC UA配置全流程:从安装到无密码访问(附常见问题解决)

本文提供了倍福TwinCAT3 OPC UA配置的完整实战指南,重点讲解如何实现无密码游客访问。从软件安装、授权配置、服务器初始化到深度排错,详细解析了配置流程中的关键步骤与常见陷阱,帮助工程师高效打通PLC与上位系统的数据通讯通道。

vulkan6gpu的博客 473

力扣26-删除排序数组中的重复项【双指针】

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 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 .

城溪羡鱼的博客 448

【图形学】Loop细分算法及半边结构实现(C++)

文章目录Loop 细分算法介绍增加新顶点更新旧顶点算法实现半边结构半边结构的表示方法半边结构的构造方法创建所有顶点创建所有面及半边半边结构的使用 Loop 细分 顾名思义,网格细分是将粗糙网格精细化的过程,如下动图。Loop细分是众多网格细分算法的一种,Loop细分仅仅对三角形网格模型有效。值得注意的是,虽然叫Loop细分,但是不能理解为“循环”细分,叫这个名字是因为作者的名字是这个而已。 下面是一个粗糙的兔子模型1000个面,进行3次细分 算法介绍 Loop细分算法主要分两步进行 增加新顶点:增加

wk_119的博客 8067

DSSAT模型建模教程

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。现有版本V4.7能模拟27种主要农作物的生长发育和产量形成过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。如果你是个模型入门者,这次将让你体验一键模拟的乐趣。

weixin_55561616的博客 1414

【27】移除元素【LeetCode】

1.题目描述 给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那么nums的前k个元素应该保存最终结果。 将最终结果插入nums的前k个位置后返回k。 不要使用额外的空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。...

书启鸿蒙知秋枫 1693

CentOS7下Graylog3.0高效日志管理:从零搭建到实战应用

本文详细介绍了在CentOS7操作系统上从零开始搭建Graylog3.0日志管理平台的完整过程。内容涵盖Java环境准备、MongoDB与Elasticsearch依赖安装、Graylog Server核心配置,并实战演示了通过Graylog Sidecar集中管理日志采集器以及配置邮件告警功能,为中小型团队提供了一个比ELK更轻量、易维护的一体化日志解决方案。

weixin_29207149的博客 88

Leetcode JAVA刷刷站(26)删除有序数组中的重复项

Leetcode JAVA刷刷站——删除有序数组中的重复项篇

m0_73399576的博客 833

5分钟搞定JY901S与STM32通信:硬件I2C+DMA配置全流程(附OLED显示教程)

本文详细介绍了如何通过STM32硬件I2C接口配合DMA高效读取JY901S姿态传感器数据,并实现OLED实时显示。文章从硬件连接、I2C与DMA配置、通信协议解析到数据可视化,提供了完整的实战流程和避坑指南,帮助开发者快速构建高精度、低CPU占用的姿态感知系统。

weixin_29185167的博客 484

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法。

kevin1499的博客 1617

Leetcode刷题-(26~35)-Java

算法是码农的基本功,也是各个大厂必考察的重点,让我们一起坚持写算法题吧。遇事不决,可问春风,春风不语,即是本心。我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦,慢慢来,会很快,向前走,别回头。

nuist_NJUPT的博客 1275

ADT MCP Server 把 ABAP 开发带进 Agent 模式

今天讨论 ADT MCP Server,不能只把它看成 Visual Studio Code 里多出来的一个开关。它真正有意思的地方,在于它把 ABAP 后端开发里那些原本需要手工点击、手工创建、手工激活、手工查服务元数据的动作,包装成一组可以被 GitHub Copilot 这类 coding agent 调用的工具。SAP 在 RAP130 练习里把它描述为运行在 ADT for Visual Studio Code 扩展内部的本地 HTTP Server,它实现的是 Model Context Pro

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 185

【leetcode刷题】57.删除有序数组中的重复项——Java版

50天了

公号:一条coding 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

leetcode_26. 删除有序数组中的重复项

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

qq_42742845的博客 897

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【PythonCode】力扣Leetcode26~30题Python版

力扣26-30

weixin_43790276的博客 2029

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode - 26 删除有序数组中的重复项

的前五个元素被修改为 0, 1, 2, 3, 4。不需要考虑数组中超出新长度后面的元素。当 j 越界时,此时 [0, i] 范围就是无重复元素的原地数组,长度为 i+1。// 长度正确的期望答案。的前两个元素被修改为 1, 2。不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度 2,并且原数组。函数应该返回新的长度 5,并且原数组。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。

优快云 871

❤️思维导图整理大厂面试高频数组9: 删除重复元素的通解问题, 力扣26/80❤️

此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关于本专栏所有题目的目录链接, 刷算法题目的顺序/注意点/技巧, 以及思维导图源文件问题请点击此链接. 想进大厂.

孤柒的博客 1万+

面试经典150题——删除有序数组中的重复项

面试经典150题——双指针的妙用~新手也能学会!!!

WenJGo的博客 1405

LeetCode刷题26-简单-删除有序数组中的重复项

LeetCode刷题26-简单-删除有序数组中的重复项

布小禅的博客 937

力扣简单题系列:删除有序数组中的重复项(LeetCode 26)

这道题通过双指针的方法,高效地删除了有序数组中的重复元素,并返回了新数组的长度。对于初学者来说,掌握双指针的思想是解决类似问题的关键。

weixin_53910667的博客 813

LeetCode26 删除有序数组中的重复项

return 0slow = 0# 填内部逻辑:先移慢指针,再赋值slow += 1核心逻辑:把复杂代码拆成 “先写框架→再填简单部分→最后填核心逻辑”,逐步完成,避免一开始就盯着完整代码焦虑。拆解思路:把 “懂的思路” 拆成 “逐行代码指令”,不要跳步;先写框架:先写函数、循环、条件判断的空框架,再填内容;先易后难:先写边界条件、变量初始化这些简单的,再填核心逻辑;刻意模仿:经典模板先背熟,再理解,最后改造;手动模拟:写完后手动走一遍执行流程,验证逻辑是否正确。

m0_63161039的博客 977

[LeetCode] 26. 删除有序数组中的重复项(java实现)

[LeetCode] 26. 删除有序数组中的重复项(java实现)1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路: ① 剩下的节点是否够k个(遍历一遍) ② 剩下的节点够k个的话,将其中的节点全部翻转 注意:此处翻转有三步: 1. 翻转k个节点 2. 改变前置指针 3. 改变末尾指针 ③ 判断剩下的节点,如果满足,则执行第2步,否则直接返回dummy(哨兵)即可 3.

cloud的博客 1290

leetcode面试经典 150 题第三题(26. 删除有序数组中的重复项)#更适合新手学习

遍历这个数组,并记录现在不重复的这个元素目前的下标,一样则继续遍历不改变不重复元素目前的下标,不一样那就将不重复元素下标后面的那个值进行赋值,并将不重复的这个元素进行记录(文字描述可能不太清晰,代码可能解释的比我好,大家可以直接读代码)先用最笨的思路,既然不让重复,那就把遍历过的元素进行储存下来,瞬间想到一个好用的数据结构:HashSet,这就好办了,如果set中有这个元素就跳过它,也就是删除它。非严格递增就代表着相同的元素都在一起,就可以省下set集合的使用,怎么去写呢?删除重复出现的元素,使每个元素。

m0_59559099的博客 1638

【leetcode】26. 删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]

qq_38473254的博客 758

力扣[LeetCode]-面试150Java代码实现

为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

kearily的博客 1222
上一篇: java数据结构与算法刷题-----LeetCode20:有效的括号
下一篇: java数据结构与算法刷题-----LeetCode27:移除元素
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值