在用户列表中查找重复的用户(在面试中询问)

时间:2017-03-23 22:59:26

标签: arraylist hashmap hashset quick-union

最近我在接受SDE角色采访时被问到这个问题。

假设您有一个用户对象列表

class User {
    String userId;
    String email;
    String ip_addr;
} 

其中userId字段在所有用户中都是唯一的,而ip_addremail不一定是这样。

并且您知道某些用户拥有多个用户帐户(如果任何两个用户对象共享一个公共emailip_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就足够了(使用列表和集合和映射)

您的方法和解决方案以及相应的时间复杂度是什么?

0 个答案:

没有答案