最近我在接受SDE角色采访时被问到这个问题。
假设您有一个用户对象列表
class User {
String userId;
String email;
String ip_addr;
}
其中userId
字段在所有用户中都是唯一的,而ip_addr
和email
不一定是这样。
并且您知道某些用户拥有多个用户帐户(如果任何两个用户对象共享一个公共email
或ip_addr
,则将其归类为属于同一用户。)
您需要编写一个函数,其签名如下:
List<List<User>> findDups(User[] userList) {
// code here
}
[编辑]所以例如,如果有7个用户,其中只有2个是唯一的,则该函数可以返回类似以下内容(不一定按此特定顺序):
{
{user1, ip1, email1},
{user5, ip5, email1},
{user24, ip5, email2}
},
{
{user2, ip2, email2},
{user7, ip2, email7},
{user8, ip2, email0},
{user19, ip19, email7}
}
这里,在该第一组中,第一用户(user1)是与第二用户(user5)相同的用户,因为他们共享相同的电子邮件地址。我们还知道第三个用户(user24)也是同一个用户,因为它与列表中的第二个用户共享相同的IP地址(ip5)。 [/ END编辑]
您将使用什么数据结构?建议的解决方案的时间复杂度是多少?
我试图使用不相交的集合联盟(快速联合),这会给我线性复杂性,但是访谈者不断试图引导我远离那个并且说只是Collection API就足够了(使用列表和集合和映射)
您的方法和解决方案以及相应的时间复杂度是什么?