知识点
知识点
数组或链表去重
第一个想到的,肯定是使用哈希表,这也是最常用的
如何原地给有序数组或链表去重
对于数组,它在尾部插入、删除元素很高效,但是在开头或中间插入、删除元素很低效。因此一般处理数组问题,我们尽量能只对数组尾部元素进行操作
对于已经排序好的数组,重复元素肯定是连在一起的,因此寻找它们很简单。但是不能直接删除,因为在数组中间删除元素复杂度太高了;同时原地删除,则不能开辟新数组。
对于数组相关的算法,我们可以考虑:如何将元素换到最后,这样就可以避免在数组中间操作元素。按照该思路,则我们可以使用快慢指针来解决数组原地去重问题。
具体思路为:让慢指针slow走左后面,快指针fast走在前面探路,找到一个不重复的元素就告诉slow并让slow前进一步,并且让不重复元素替换slow位置的元素。这样当fast指针遍历完整个数组nums后,nums[0..slow]就是不重复元素,之后的所有元素都是重复元素
同时,有序链表的原地去重思路,和数组的一样。
LeetCode算法题目
LeetCode算法题目
26.【删除有序数组中的重复项】
解题思路:利用快慢指针,快指针在前面探路,如果找到一个元素不重复,则让慢指针前进一步。
316.【去除重复字母】/1082.【去除重复字母】