最近我不得不解决下面的算法问题,这让我很困惑。
假设您有一个包含整数的集合数组。编写一个函数,返回所有数字不在任何其他集合中的所有集合。 例{0,4,9},{3,4,5},{6,7,8} 结果{6,7,8}
代码应该在Objective或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;
}发布于 2015-05-06 18:51:58
代码迭代数组的数组。然后得到下一个数组,迭代它的数字,但是尝试将每个数字与当前集合进行比较。
假设您有一个NSArray of 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);https://stackoverflow.com/questions/30084396
复制相似问题