2012人人笔试题
人人里的好友关系,例如A和B是好友,B和C是好友,且A和C不是好友,则称A和C是二度好友。现给出10w条好友关系,让你从中选出某个特定人的十度好友,要求时间复杂度为O(n)。
[解决办法]
第一步:
根据用户ID或用户名做hash值,把好友关系组织成:
要红hash是因为不用hash的话插入是o(nlogn)的复杂度,用hash才能达到o(n)
用户A:用户A的好友列表
用户B:用户B的好友列表
用户C:用户C的好友列表
。。。。。。。。。。。
第二步:
所有用户的初始值设为max_int,A的值设为0
1,把A的好友列表的值设置为1
2,遍历用户列表,如果值为1,把该用户列表中值大于1的设置为2
3,遍历用户列表,如果值为2,把该用户列表中值大于2的设置为3
。。。。。。
4,遍历用户列表,如果值为9,把该用户列表中值大于9的设置为10
输出值为10的用户
[解决办法]