一、题目
给你一个 升序排列 的数组 nums
,
请你原地删除重复出现的元素,使每个元素 只出现一次
返回删除后数组的新长度。
元素的 相对顺序 应该保持 一致 。
然后返回 nums
中唯一元素的个数。
二、思路解析
这道题要用到 "双指针" 的概念,这也是我第一次接触。
很不幸,这道题我又不会做,也是看了答案之后,才悟出来的。
下面是我看完答案后,自己的思考过程:
想要数组元素不重复出现,那就可以用两个指针来遍历数组。
一个快指针,遍历得快,能够更快发现重复的元素;
另一个慢指针用来接受那些不重复的元素。
最后返回慢指针即可。
还有一点要注意的,就是要使用 If 语句进行分类讨论,比如 nums.length == 0 的情况,数组没有元素,这时候则应该返回 0 。
三、完整代码
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length==0){
return 0;
}
int fast = 1;
int slow = 1;
while(fast<nums.length){
if(nums[fast-1]!=nums[fast]){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
}
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!