給定一個整數(shù)數(shù)組 nums 和一個目標值 target,請你在該數(shù)組中找出和為目標值的那 兩個 整數(shù)巩趁,并返回他們的數(shù)組下標痒玩。
你可以假設每種輸入只會對應一個答案。但是议慰,數(shù)組中同一個元素不能使用兩遍蠢古。
該題目在力扣是第1題,地址是 https://leetcode-cn.com/problems/two-sum
下面介紹用oc改怎么做這道題
原理
利用映射别凹,也就是oc中的字典草讶,以數(shù)值為key,以下標為value進行保存
用target的值減去數(shù)組中正在遍歷的值炉菲,以減去后的值為key去字典的allkeys中查找有沒有對應的key堕战,有就返回key所對應的value,沒有就加入字典中
代碼
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
for (int i = 0; i < array.count; i++) {
NSString *obj = array[i];
NSInteger num = [obj integerValue];
NSInteger needNum = target - num;
NSString *numStr = [NSString stringWithFormat:@"%ld",needNum];
if ([dic.allKeys containsObject:numStr]) {
return @[dic[numStr],@(i)];
}else{
dic[obj] = @(i);
}
}
return @[@-1,@-1];
}
調(diào)用
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *nums = @[@"2", @"7", @"11", @"15"];
NSInteger target = 22;
NSArray *twoIndex = [self twoSum:nums target:target];
}