1. 程式人生 > >演算法筆記-陣列之選數字:Picking Numnbers

演算法筆記-陣列之選數字:Picking Numnbers

問題描述:

給定一個由0到100之間的整陣列成的陣列,然後從其中選出一定數量的整陣列成新的陣列,要求新的陣列內任意兩個數之間的絕對差小於或者等於1

Sample:

 ***** Input:
 ***** @[@(4),@(2),@(3),@(2),@(3),@(5),@(6),@(1),@(0)]
 ***** Output:
 ***** 4
思路:統計0到100內每個陣列出現的次數,找到每相鄰兩個數的和,其中最大的就是答案。
NSArray *array = @[@(4),@(2),@(3),@(2),@(3),@(5),@(6),@(1),@(0)];
NSMutableDictionary *parameter = [NSMutableDictionary dictionary];
NSInteger countNumber = 0;
// 統計每個數字的次數
for (int i = 0; i < 100; i++) {
    [parameter setObject:@(0) forKey:[NSString stringWithFormat:@"%d",i]];
}
for (int i = 0; i < array.count; i++) {
    NSString *index = [NSString stringWithFormat:@"%d",[array[i] intValue]];
    parameter[index] = @([parameter[index] intValue] + 1);
}
// 取出相鄰和最大
for (int i = 0; i < 100; i++) {
    NSString *index = [NSString stringWithFormat:@"%d",i];
    NSString *indexNext = [NSString stringWithFormat:@"%d",i + 1];

    if ([parameter[index] intValue] + [parameter[indexNext] intValue] > countNumber) {
        countNumber = [parameter[index] intValue] + [parameter[indexNext] intValue];
    }
}
結果:

這裡寫圖片描述