两个集合中找相同元素

作者: liyc_dev | 来源:发表于2017-02-15 10:20 被阅读68次

迁移自开源中国

在两个集合(万级别的数据量)中,找出相同的元素,并保存到一个集合中。

第一反应:两重循环解决问题,对,问题是可以解决,但是通过小括号中的提示可以看出,明显是在考效率的问题。

所以这种O(n^2)的时间复杂度是不行的。

继续想了一下:一次循环,遍历其中一个集合,拿集合中的元素去第二个集合中通过二分查找法查找,确定是否重复。

所以这种时间复杂度是:O(n*logn),较之前好些,但是还有更好的,可以是O(n)嘛?

经过面试官的提醒:首先对两个集合按照升序排列,再对两个集合定义各自的游标,一次循环,通过游标查找相同元素,原理是:如果从A集合中取出的元素小于B集合中的元素,那么将A的游标下移;如果相等则将元素存入第三个集合中,并且将A的游标下移;如果大于B集合中的元素,则将B的游标下移;直到遍历完某一个集合为止。

如果有更好的还请多多指教。

NSArray *array1 = @[@(1), @(3), @(5), @(7), @(10), @(30)];
NSArray *array2 = @[@(3), @(7), @(30)];
NSMutableArray *array = [NSMutableArray array];
int index1 = 0;
int index2 = 0;
while (YES) {
    NSNumber *n1 = nil;
    if (index1 < array1.count) {
        n1 = array1[index1];
    }
    NSNumber *n2 = nil;
    if (index2 < array2.count) {
        n2 = array2[index2];
    }
    if (n1 == nil || n2 == nil) {
        break;
    } else {
        NSComparisonResult result = [n1 compare:n2];
        if (result == NSOrderedAscending) {
            index1++;
        } else if (result == NSOrderedSame) {
            [array addObject:n1];
            index1++;
        } else {
            index2++;
        }
    }
}
for (NSNumber *n in array) {
    NSLog(@"%@", n);
}

相关文章

  • 两个集合中找相同元素

    迁移自开源中国 在两个集合(万级别的数据量)中,找出相同的元素,并保存到一个集合中。 第一反应:两重循环解决问题,...

  • 集合

    集合类之间的继承关系: Set集合 Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中...

  • 收集类型 - 字典

    一个集合也是能够存放多个相同类型元素的收集。不过它与数组不同的是:一个集合中不允许出现两个完全相同的元素。一个集合...

  • NSSet的用法

    集合 集合特点:1⃣️存储的元素互不相同(若在集合中放入两个相同的元素,会自动过滤掉其中一个)2⃣️存储元素是无序...

  • 2018-11-15-MinHash原理

    在数据挖掘中,一个最基本的问题就是比较两个集合的相似度。通常通过遍历这两个集合中的所有元素,统计这两个集合中相同元...

  • cogroup

    cogroup:对两个RDD中的KV元素,每个RDD中相同key中的元素分别聚合成一个集合。与reduceByKe...

  • # Python -07 组合数据类型

    集合类型 集合是多个元素的无序组合集合类型与数学中的集合概念一致集合元素之间无序,每个元素唯一,不存在相同元素 集...

  • 集合、列表、元组、字典

    集合的定义 集合是多个元素的无序组合,与数学中的集合概念一致,集合元素之间无序,每个元素唯一,不存在相同元素,且...

  • 详解HashSet 、LinkedHashSet、TreeSet

    Set接口 不允许包含相同的元素,如果调用add方法把两个相同元素加入同一个集合中,add方法返回false。 S...

  • 说说高中数学那点事之集合篇

    ⒈集合相等:集合中组成的元素完全相同 ⒉有限集:含有有限个元素 ⒊无限集:含有无限个元素 ⒋表示集合的方法 ⑴列举...

网友评论

    本文标题:两个集合中找相同元素

    本文链接:https://www.haomeiwen.com/subject/mitqwttx.html