找重复元素问题

找重复元素问题

老师能请教您一个问题吗?

给定一个字符串数组,数组每个元素都是字符串,数组长度是10000,如何用最快的速度找出里面两个相同的字符串


第二个:

如何用两个栈,对一个链表反序,链表的数据很多很多


谢谢老师

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
liuyubobobo 2021-03-25 05:06:20

1


使用哈希表。本质是给每一个字符串计算一个哈希值,在遇到哈希冲突的时候再检测两个字符串是否相等。注意,哈希表可以存储(哈希值,字符串索引)的数据对,而不需要把字符串重新存一份(如果字符串长度很长,这是很耗空间的)。


关于字符串的哈希值,可以参考这个课程哈希表的部分(大部分语言自己有自己内部的实现,比如 Java.)



2


你确定问题需要两个栈吗?因为对一个链表进行翻转,两个指针遍历一遍链表就够,根本不需要栈,反而是额外的空间耗费。


参考代码(Java):https://github.com/liuyubobobo/Play-with-Algorithm-Interview/blob/master/05-About-Linked-List/Course%20Code%20(Java)/01-Reverse-Linked-List/src/Solution1.java


对应 Leetcode 206 号问题。


即使需要栈,一个栈就够,相当于是模拟递归翻转的过程。理解起来也很简单,所有节点一次入栈,然后出栈以后出栈的节点的 next 指向栈顶的节点就好。入栈再出栈,所有节点已经反序了,只需要确保 next 的链接就好了。



继续加油!:)

  • 提问者 ForeverLovel #1

    谢谢老师,关于第二个问题就是有要求,链表的数据很大很大,不能全部读进内存,然后栈的空间有限制,一次只能入栈五个节点或者十个节点

    2021-03-25 08:05:07
  • liuyubobobo 回复 提问者 ForeverLovel #2

    我说的两个指针的方法完全不需要栈。

    2021-03-25 08:37:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师