2015-05-06 6 views
6

Ich musste vor kurzem die folgende Algorithmusfrage lösen, die mich verwirrte.Alle Sätze zurückgeben, wo alle ihre Zahlen in keinem anderen Satz sind

Angenommen, Sie haben ein Array mit Mengen, die Ganzzahlen enthalten. Schreiben Sie eine Funktion, die alle Sätze zurückgibt, in denen alle ihre Nummern in keiner anderen Reihe sind.

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

RESULT {6,7,8}

sollte der Code sein in Objective-C oder Swift.

[EDIT]

kam ich mit so etwas wie das so weit, aber es ist nicht wirklich beenden kann.

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

Was Sie fragen? Was hast du probiert? Welches Problem hast du? Oder willst du nur, dass dir jemand den Code gibt? – rmaddy

+0

Das ist die obige Frage, ich konnte es nicht lösen, also suche ich nach der Antwort, um es zu verstehen. –

+0

Posten Sie, was Sie versucht haben und erklären Sie, welches Problem Sie haben. – rmaddy

Antwort

0

Ihr Code wiederholt das Array von Arrays. Aber dann bekommst du das nächste Array, iteriere seine Zahlen, versuche aber, jede dieser Zahlen mit der aktuellen Menge zu vergleichen.

Vorausgesetzt, dass Sie eine NSArray von NSArray Objekte haben, können Sie dies tun:

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

Prüfregeln:

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

Es funktioniert super! Ich habe den Schlüssel vermisst, um jedes Set zum A-Set zu iterieren, überspringe es, wenn es das selbe ist und benutze intersect! Vielen Dank. –

Verwandte Themen