2015-05-06 14 views
6

Son zamanlarda, beni şaşırttığı aşağıdaki algoritma sorusunu çözmem gerekiyordu.Tüm sayılarının başka bir sette bulunmadığı kümeleri döndürün

Tam sayılar içeren bir dizi kümeniz olduğunu varsayalım. Tüm sayılarının hiçbiri diğer kümede olmayan tüm kümeleri döndüren bir işlevi yazın.

Örnek {0,4,9}, {3,4,5}, {6,7,8}

SONUÇ {6,7,8}

kodu olmalıdır Objective-C veya Swift'de.

[DÜZENLE]

şimdiye kadar böyle bir şey ile geldi ama gerçekten bitiremeyiz.

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

Ne soru var? Ne denedin? Hangi sorun yaşıyorsunuz? Yoksa sadece birinin sana kodu vermesini istiyor musun? – rmaddy

+0

Yukarıdaki soru bu, ben bunu çözemedim, bu yüzden bunu anlamak için cevabı arıyorum. –

+0

Neyi denediğinizi sorun ve yaşadığınız sorunu açıklayın. – rmaddy

cevap

0

Kodunuz dizi dizisini yineler. Ama sonra sıradaki diziyi alırsınız, sayılarını yineleyin, ancak bu sayıların her birini geçerli setle karşılaştırmaya çalışın.

bir NSArrayNSArray nesneleri var varsayarsak, bunu yapabilirsiniz:

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

Testi kodu:

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

Harika çalışıyor! Her seti A setine tekrarlamak için anahtarını kaçırıyordum, eğer aynı olanı ise atla ve kesişiyorsun! Teşekkürler. –

İlgili konular