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

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

题目链接:

https://leetcode.cn/problems/remove-duplicates-from-sorted-array

题目描述:

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

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

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

示例:
输入: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 。不需要考虑数组中超出新长度后面的元素。

思路

以题目给出的示例而言,我们可以把数组分为两个部分:

前一部分是不重复的

后一部分是重复的,也就是该删除的。

我们可以定义快慢指针:

0,slow-1\]代表值不重复的区域; \[slow,fast-1\]代表值重复的区域; \[fast,n-1\]代表未处理的区域。 #### 循环逻辑 1. 初始化快慢指针slow,fast,均初始化为1(注意:\[0,slow-1\]代表值不重复的区域,如果slow = 1\[0,0\]只有一个元素,肯定不重复,符合我们的规定); 2. 如果nums\[fast\] 不等于 nums\[slow - 1\],说明遇到了不重复的元素,那么就把 nums\[slow\] 赋值为nums\[fast\],并把slow指针向后移动; 3. fast指针向后移动 直到fast超出数组长度。 然后返回slow的值,就是所求数组长度。 代码如下: ```java class Solution { public int removeDuplicates(int[] nums) { int slow = 1,fast = 1; while (fast < nums.length) { if(nums[fast] != nums[slow - 1]){ nums[slow] = nums[fast]; slow++; } fast++; } return slow; } } ```

相关推荐
LDG_AGI6 分钟前
【推荐系统】深度学习训练框架(九):推荐系统与LLM在Dataset、Tokenizer阶段的异同
人工智能·深度学习·算法·机器学习·推荐算法
爪哇部落算法小助手10 分钟前
每日两题day61
数据结构·c++·算法
Swift社区11 分钟前
LeetCode 439 - 三元表达式解析器
算法·leetcode·ssh
小殊小殊11 分钟前
重磅!DeepSeek发布V3.2系列模型!
论文阅读·人工智能·算法
裤裤兔13 分钟前
利用matlab进行FDR校正的实现方式
数据结构·算法·matlab·多重比较矫正·校正·fdr
野蛮人6号13 分钟前
力扣热题100道之31下一个排列
算法·leetcode·职场和发展
子一!!14 分钟前
哈希桶,元素插入逻辑实现
算法·哈希算法
敲代码的嘎仔14 分钟前
LeetCode面试HOT100——160. 相交链表
java·学习·算法·leetcode·链表·面试·职场和发展
吃着火锅x唱着歌14 分钟前
LeetCode 454.四数相加II
算法·leetcode·职场和发展
敲代码的嘎仔16 分钟前
LeetCode面试HOT100—— 206. 反转链表
java·数据结构·学习·算法·leetcode·链表·面试