美文网首页
Leetcode(1) OC 求两数之和

Leetcode(1) OC 求两数之和

作者: 世玉茹花 | 来源:发表于2021-03-01 14:33 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:Leetcode(1) OC 求两数之和

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