网站建设shopify帝国 cms 网站关键字
目录
题目:
示例:
题目分析:
解题思路:
题目:
- 给你一个 非严格递增排列 的数组
 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;} 

