首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回所有数字不在其他集合中的集合。

返回所有数字不在其他集合中的集合。
EN

Stack Overflow用户
提问于 2015-05-06 18:07:12
回答 1查看 66关注 0票数 6

最近我不得不解决下面的算法问题,这让我很困惑。

假设您有一个包含整数的集合数组。编写一个函数,返回所有数字不在任何其他集合中的所有集合。 例{0,4,9},{3,4,5},{6,7,8} 结果{6,7,8}

代码应该在Objective或Swift中。

编辑

到目前为止,我想出了一些类似的东西,但并没有真正完成。

代码语言:javascript
复制
- (NSArray*) getDisjointedSets:(NSArray*)sets {
    NSArray* resultedSet;
    NSMutableArray* indexDoesntExistInSets = [NSMutableArray array];
    [sets enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSArray* nextIndexArray = [sets objectAtIndex:idx+1];
        NSNumber* numberIndex = obj;
        [nextIndexArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            NSNumber* numberNextIndex = obj;
            if (numberIndex.intValue == numberNextIndex.intValue) {
               // number exists in the next set, continue

               *stop = YES;;
            } else {
                [indexDoesntExistInSets addObject:numberIndex];
            }
        }];
    }];
    return resultedSet;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 18:51:58

代码迭代数组的数组。然后得到下一个数组,迭代它的数字,但是尝试将每个数字与当前集合进行比较。

假设您有一个NSArray of NSArray对象,您可以这样做:

代码语言:javascript
复制
- (NSArray *)getDisjointedSets:(NSArray *)sets {
    NSMutableArray *resultSet = [NSMutableArray array];
    for (NSArray *arrayA in sets) {
        BOOL noMatch = YES;
        for (NSArray *arrayB in sets) {
            // Skip if both are the same array
            if (arrayA != arrayB) {
                NSMutableSet *setA = [NSMutableSet setWithArray:arrayA];
                NSSet *setB = [NSSet setWithArray:arrayB];
                [setA intersectSet:setB];
                if (setA.count) {
                    // The two sets have something in common
                    noMatch = NO;
                    break;
                }
            }
        }

        if (noMatch) {
            [resultSet addObject:arrayA];
        }
    }

    return resultSet;
}

测试代码:

代码语言:javascript
复制
NSArray *sets = @[
    @[ @0, @4, @9 ],
    @[ @3, @4, @5 ],
    @[ @6, @7, @8 ]
];
NSArray *result = [self getDisjointedSets:sets];
NSLog(@"results = %@", result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30084396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档