LeetCode 26 删除有序数组中的重复项
题目
给你一个 非严格递增排列 的数组 nums
,请你原地
删除重复出现的元素,使每个元素 只出现一次
,返回删除后数组的新长度。元素的 相对顺序 应该保持
一致 。然后返回 nums
中唯一元素的个数。
考虑 nums
的唯一元素的数量为 k
,你需要做以下事情确保你的题解可以被通过:
- 更改数组
nums
,使nums
的前k
个元素包含唯一元素,并按照它们最初在nums
中出现的顺序排列。nums
的其余元素与nums
的大小不重要。 - 返回
k
。
判题标准:
系统会用下面的代码来测试你的题解:
1 |
|
如果所有断言都通过,那么您的题解将被 通过。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums
已按 非严格递增 排列
题解
因为没有要求空间复杂度,最初的思路是新建一个res
数组和nums
长度一致,然后先给res[0] == nums[0]
,然后遍历nums
从1
开始到最后,遇到不一样的元素添加到res
里。index
先加后用(因为初值已经赋值了)。然后再把res
值给nums
,返回index + 1
即可,结果时间复杂度与空间复杂度惨不忍睹。
转念一想,把res
都换成nums
似乎可行,然后测试确实跑通了,时间复杂度100%,空间复杂度55.50%。其实本质上就是双指针,第二个指针i
经过的数据都不重要了(因为重要的数据都被index
保存了)。突然有点顿悟的感觉,hhhhhhho( ̄▽ ̄)ブ。
1 |
|
LeetCode 26 删除有序数组中的重复项
https://excelius.xyz/leetcode-26-删除有序数组中的重复项/