美文网首页
算法题之---《两数之和》

算法题之---《两数之和》

作者: 忧郁的小码仔 | 来源:发表于2019-09-15 15:58 被阅读0次

题目:

给定一个数组和一个目标值target,不考虑重复使用元素,找出数组中和=target的两个元素。

首先,最直观的做法就是两层嵌套遍历,两个两个元素逐个相加判断。当然,这道题肯定还有更简洁的解法,更大众的解法就是
借助字典,将数组中的元素值作为key,索引作为value保存即可。每遍历一次,只要判断一下字典中键值为:target-value的项目存不存在即可。

+(void)twoSumWithArr:(NSArray *)arr target:(int)target {
    
    NSMutableDictionary *res = [[NSMutableDictionary alloc] init];
    
    for (int i=0; i < arr.count; i++) {
        
        int other = target - [arr[i] intValue];
        
        NSString *key = [NSString stringWithFormat:@"%d", other];
        
        if ([res valueForKey:key]) {
            
            NSLog(@"%@ + %@ = %d", arr[i], key, target);
            NSLog(@"下标是: [%d, %@]", i, [res valueForKey:key]);
            
        } else {
            [res setObject:@(i) forKey:[NSString stringWithFormat:@"%@", arr[i]]];
        }
    }
}

这样,时间复杂度就将为O(n)了,只不过牺牲了点控件复杂度。

相关文章

网友评论

      本文标题:算法题之---《两数之和》

      本文链接:https://www.haomeiwen.com/subject/oifdyctx.html