说明,这道题我尝试了用其他的方法去解,如果按照题目要求的话,使用两个指针的方法就可以完成,但这里我自己想训练自己使用数组和哈希表的能力,所以大家参考就好。
1. 题目
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
2. 相关知识
- 哈希表
- ArrayList
3. 解题思路
思路很简单,使用哈希表、ArrayList 来辅助解题
- 遍历整个 nums 数组,对于每一个值,如果这个值没有在哈希表中,就写入哈希表中,并且把这个值放到新的 list 里面去,如果已经在哈希表中,那么就不把他放到新的 list 里面。
- 最后把 list 里面的每个值 .get() 重新把 nums 填满作为输出的数组。
4. 代码
class Solution {
public int removeDuplicates(int[] nums) {
ArrayList<Integer> list = new ArrayList<>();
HashMap<Integer,Integer> map = new HashMap<>();
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (!map.containsKey(nums[i])){
map.put(nums[i],i);
list.add(nums[i]);
}
}
for(j = 0; j < list.size(); j++){
nums[j] = list.get(j);
}
return j;
}
}