LeetCode主题整理(1)滤重问题

来源:互联网 发布:一个域名一年要多少钱 编辑:程序博客网 时间:2024/05/17 01:33

下面都是滤重题目。


(25)Remove duplicate

给定一个数,给定一个数组,删除数组中的这个数,修改原数组使得新数组为去掉了这个数之后的剩下元素构成的数组并返回新数组的长度。通过交换来避免数组删除时的逐个移动,从而降低时间复杂度。

(26)Remove duplicate from sorted Array

排序数组滤重。考虑两种做法。

第1种常规,每次都同原数组中删除一个数组,然后需要逐个移动已删除元素后面的元素。时间复杂度为O(N²)

第2种聪明,不断地用不重复的元素生成新的数组。一边扫描原数组,一边判断是否是不重复的元素,如果否就丢弃,如果是,则就地原数组的空间上生成,时间复杂度为O(N)


(81)Remove duplicate from sorted Array2

排序链表滤重,对于重复元素,保留两个。思路和上面的(26)非常相似。


(83)Remove duplicate from sorted List

排序链表滤重,对于重复元素,保留一个。


(84)Remove duplicate from sorted List 2

排序链表滤重,不保留任何重复元素,只保留原始链表中没有重复的元素。


小结:

1 常规思路是用set滤重,空间复杂度是O(N)。但是由于下面的大部分题目中说原始数组/链表是sorted,借助已经排好序的这个条件。可以两两比较从而把空间复杂度降低到O(1)
2 避免数组的删除时逐个移动元素就可以降低时间复杂度。

0 0