给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
该题目在力扣是第1题,地址是 https://leetcode-cn.com/problems/two-sum
下面介绍用oc改怎么做这道题
原理
利用映射,也就是oc中的字典,以数值为key,以下标为value进行保存
用target的值减去数组中正在遍历的值,以减去后的值为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];
}
调用
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *nums = @[@"2", @"7", @"11", @"15"];
NSInteger target = 22;
NSArray *twoIndex = [self twoSum:nums target:target];
}