题目:
给定一个数组和一个目标值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)了,只不过牺牲了点控件复杂度。