松原网站推广百度应用商店下载
目录
题目:
示例:
题目分析:
解题思路:
题目:
- 给你一个 非严格递增排列 的数组
nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回nums
中唯一元素的个数。- 考虑
nums
的唯一元素的数量为k
,你需要做以下事情确保你的题解可以被通过:- 更改数组
nums
,使nums
的前k
个元素包含唯一元素,并按照它们最初在nums
中出现的顺序排列。nums
的其余元素与nums
的大小不重要。- 返回
k
26. 删除有序数组中的重复项 - 力扣(LeetCode)https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/
示例:
题目分析:
从题目得知,我们要在一个递增的数组中,删去数组内部的重复出现的元素,并且要直接在数组上进行删除操作,且最后需要数组保持递增的顺序。
解题思路:
- 因为我们要在数组内部进行删除操作,于是我们可以采取覆盖操作,将重复的元素覆盖,对此我们可以使用指针进行覆盖操作。
- 但是,当覆盖后,又会多出重复的元素,因此还需要一个指针用来覆盖 覆盖的元素。
- 又因为根据示例,我们最后返回的是删去重复项后,数组的长度。
- 所以最后可以转变为,使用两个指针,其中一个为快指针 fast ,另一个是慢指针 slow ,fast指向数组的第二个元素,slow指向数组的第一个元素。
- 随后,将两个指针指向的元素进行比较,如果二者指向的元素不同,则二者同时向前走一步。
- 若二者元素相同,则slow朝前走,fast保持不动,并且将fast的赋予slow指向的值。
图例来源:Necho - 力扣(LeetCode)
代码演示:
int removeDuplicates(int* nums, int numsSize){int fast =1;int slow =0;while(fast<numsSize){if(nums[slow]==nums[fast]){fast=fast+1;}else{slow= slow+1;nums[slow]=nums[fast];}}return slow +1;}