继续打卡算法题,今天学习的是LeetCode的第26题删除有序数组中的重复项,这道题目是道简单题
。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些帮助。
分析一波题目
哈哈,这个题目还是比较简单的,我们有两种方法可以巧妙的去除重复项
第一种是使用一个map记录出现过的数字
,如果没有出现过就不断的填充原数组。
第二种是通过双指针
,也是快慢指针
。慢指针记录不重复的数据下标,快指针用来循环整个数组。
编码解决
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length == 0) {
return 0;
}
int slow= 1;
int fast = 1;
while(fast<nums.length) {
int a= nums[fast];
int b = nums[fast-1];
//比较紧挨着的两个数是否相同,不相同需要记录下来
if(a != b) {
nums[slow++] = a;
}
fast++;
}
return slow;
}
}
总结
这道题目用双指针的效率更高,如果没怎么使用双指针解题,一开始只能想到使用map结构。