Leetcode(1) OC 求两数之和

2021-03-01  本文已影响0人  世玉茹花

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

一、暴力法:两层循环,挨着遍及查找两数之和并输出下标
时间复杂度:O(n^2)

-(NSArray *)oneSum:(int)target withArr:(NSArray*)nums{
    
    NSNumber* a;
    NSNumber* b;
    for (int i = 0; i < nums.count-1; i++) {
        for (int j=i+1 ; j<nums.count; j++) {
            
            a = nums[i];
            b = nums[j];
            
            if([a intValue]+ [b intValue] == target){
                return @[[NSNumber numberWithInt:i],[NSNumber numberWithInt:j]];
            }
        }
    }
    
    return @[@"-1",@"-1"];
    
}

二、利用哈希表
遍历每个元素x,并查找在map中是否有key为x的键值对,如果有则将键值对返回,如果没有,则将target - x最为key,x作为value保存在map中.
简单点理解,就是两个人配对,x先在公告栏map上看有没有找自己的,如果有就建立配对,如果没有就写上目标以及自己的联系方式{target - x:x},当自己的目标查看公告栏时,就可以直接找到自己
时间复杂度:O(n)

-(NSArray *)oneSum1:(int)target withArr:(NSArray*)nums{

    NSArray *result;
    
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:0];

    
    NSNumber * a;
    for (int j = 0; j < nums.count; j++) {
        
        a = nums[j];
        if (dic[a]) {
            
//            result = @[a,dic[a]]; 此为两个数
            result = @[[NSNumber numberWithInteger:[nums indexOfObject:a]],[NSNumber numberWithInteger:[nums indexOfObject:dic[a]]]];
            
        }else{
            NSNumber *b = @(target - [a intValue]);
            dic[b] = a;
        }
    }
    
    
    return result;
}
上一篇 下一篇

猜你喜欢

热点阅读