gpt4 book ai didi

objective-c - 返回所有其所有数字都不在任何其他集合中的集合

转载 作者:太空狗 更新时间:2023-10-30 03:45:48 24 4
gpt4 key购买 nike

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

Suppose you have an array of sets that contain integers. Write a function that returns all sets where all of its numbers are not in any other set.

EXAMPLE {0,4,9}, {3,4,5}, {6,7,8}

RESULT {6,7,8}

代码应使用 Objective-C 或 Swift。

[编辑]

到目前为止,我想出了类似的东西,但无法真正完成它。

- (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;
}

最佳答案

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

假设你有一个NSArray对象的NSArray,你可以这样做:

- (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;
}

测试代码:

NSArray *sets = @[
@[ @0, @4, @9 ],
@[ @3, @4, @5 ],
@[ @6, @7, @8 ]
];
NSArray *result = [self getDisjointedSets:sets];
NSLog(@"results = %@", result);

关于objective-c - 返回所有其所有数字都不在任何其他集合中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30084396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com