2015-05-06 14 views
6

Recentemente ho dovuto risolvere la seguente domanda dell'algoritmo, che mi ha confuso.Restituisce tutti i set in cui tutti i relativi numeri non sono in nessun altro set

Supponiamo di disporre di un array di insiemi che contengono numeri interi. Scrivi una funzione che restituisce tutti i set in cui tutti i suoi numeri non sono in nessun altro set .

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

RESULT {6,7,8}

Il codice dovrebbe essere in Objective-C o Swift.

[EDIT]

mi è venuta finora con qualcosa di simile, ma non può davvero finire.

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

Cosa c'è si mette in discussione? Che cosa hai provato? Che problema stai avendo? O vuoi solo che qualcuno ti dia il codice? – rmaddy

+0

Questa è la domanda sopra, non ho potuto risolverlo, quindi cerco la risposta per capirlo. –

+0

Pubblica ciò che hai provato e spiega quale problema stai riscontrando. – rmaddy

risposta

0

Il codice itera l'array di array. Ma poi ottieni la matrice successiva, itera i suoi numeri ma prova a confrontare ciascuno di quei numeri con il set corrente.

Supponendo di avere un NSArray di NSArray oggetti, si può fare questo:

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

Codice di prova:

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

Funziona benissimo! Mi mancava la chiave per iterare ogni set sul set A, saltare se è lo stesso e usare intersect! Grazie. –

Problemi correlati