单链表中剔除冗余的节点(对复杂度有要求)
单链表中删除冗余的节点(对复杂度有要求)
如单链表的节点为1,5,3,1,5,6,7,那么输出1,5,3,6,7,不要求排序的。
复杂度如何低些,先排序后删除之类就不要说了哦。
先谢谢各位啦~
------解决方案--------------------
简历一个数组 数组初始化为0
然后每遍历一个节点就先判断数据里该节点对应的元素是否为0
如果为0 就把该赋值成这个节点
否则就删除之
例如 int a[100] = {0};
第一个节点1 可以a[1] = 1;
然后下次遍历到1的时候 你观察a[1] 不是0 就说明重复了
------解决方案--------------------
楼上的方法可行,空间换时间
------解决方案--------------------
要是我 就用 map 这不是告诉lz大体思路么
------解决方案--------------------
你的方法是说创建一个数组每个元素初始化为0,然后遍历链表时让a[i] = 链表第i个的值?那么a[1] = 1.那如果有个元素值是100,或者是个负数...
------解决方案--------------------
#1 针对总数不是太大的正整数元素吧,要是其他类型当然是 hash 了,不过总体思路就这样,时间 O(n),空间 O(k),k 为 unique 元素的个数。
------解决方案--------------------
map还不如排序来得快,当然hash更快,不管是浮点数还是负数,还是其他类型,都可以用hash,关键看你怎么根据需求写hash函数了。
------解决方案--------------------
用bitmap
如单链表的节点为1,5,3,1,5,6,7,那么输出1,5,3,6,7,不要求排序的。
复杂度如何低些,先排序后删除之类就不要说了哦。
先谢谢各位啦~
------解决方案--------------------
简历一个数组 数组初始化为0
然后每遍历一个节点就先判断数据里该节点对应的元素是否为0
如果为0 就把该赋值成这个节点
否则就删除之
例如 int a[100] = {0};
第一个节点1 可以a[1] = 1;
然后下次遍历到1的时候 你观察a[1] 不是0 就说明重复了
------解决方案--------------------
楼上的方法可行,空间换时间
------解决方案--------------------
要是我 就用 map 这不是告诉lz大体思路么
------解决方案--------------------
你的方法是说创建一个数组每个元素初始化为0,然后遍历链表时让a[i] = 链表第i个的值?那么a[1] = 1.那如果有个元素值是100,或者是个负数...
------解决方案--------------------
#1 针对总数不是太大的正整数元素吧,要是其他类型当然是 hash 了,不过总体思路就这样,时间 O(n),空间 O(k),k 为 unique 元素的个数。
------解决方案--------------------
map还不如排序来得快,当然hash更快,不管是浮点数还是负数,还是其他类型,都可以用hash,关键看你怎么根据需求写hash函数了。
------解决方案--------------------
用bitmap