[算法学习记录]LeetCode 26. 删除有序数组中的重复项
题目
原题连接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
重点
- 给定的数组已排序,那么重复的元素肯定是挨在一起的;
- 原地删除,不允许创建新的数组对象,需要在元素组上进行重复数据的删除操作;
解题思路
这里我们使用快慢指针来解题;
说明:分别定义快fast
,慢slow
指针,初始的位置为数组的首尾;开始移动快指针 fast
,并将快慢指针所在位置的值进行对比;当遇到重复元素的时候,慢指针slow
位置不动,继续移动快指针fast
,也就是说遇到重复的数就跳过;当快指针fast
和慢指针slow
不相等,那么将慢指针 slow
前进一步,并将慢指针slow
位置所在的值更新为快指针fast
所在位置的值;当 fast
指针遍历完整个数组 nums
后,nums[0..slow]
即为去重后的数组,其长度为slow+1
;
提交代码
class Solution {
public int removeDuplicates(int[] nums) {
//定义并初始化快慢指针的位置
int slow = 0;
int fast = 0;
//若数组长度小于等于1,则直接返回原数组
if (nums.length <= 1) {
return nums.length;
}
while (fast < nums.length) {
// 当快慢指针所在位置的值不相等
if (nums[fast] != nums[slow]) {
//将慢指针往后移动一位
slow++;
//将慢指针所在位置的值更新为快指针所在位置的值
nums[slow] = nums[fast];
}
//移动快指针
fast++;
}
//返回无重复数组的长度
return slow+1;
}
}
提交记录
此文为个人学习记录,若有疏漏之处还望各位指正,期待与大家交流,共同进步;