Two Sum(两个数的相加)

Posted 呼呼呼呼呼65

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Two Sum(两个数的相加)相关的知识,希望对你有一定的参考价值。

2017.11.10

题目描述:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
解题思路:
1.暴力解法
强行判断nums[i]+nums[j]==target
    /**
    *暴力解法,时间复杂度是O(n^2)
    */
    public int[] twoSum(int[] nums, int target) {
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }
            }          
        } 
        throw new IllegalArgumentException("no such num!");
    }

2.利用hashMap的key-value特性

a.为数组建立索引
b.在索引中查找有没有target-nums[i]的key,并且满足不是数的本身

/**
*利用hashMap的查找元素的时间复杂度为O(1)
*总的时间复杂度是2O(n),即O(n),空间复杂度是O(n)
*/    
public int[] twoSum(int[] nums, int target) {
       Map<Integer,Integer> map= new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            map.put(nums[i],i);
        }
        for(int i=0;i<nums.length;i++){
            int num=target-nums[i];
            //判断map中是否有这个数,并且这个数不是目前这个数
            if(map.containsKey(num)&&map.get(num)!=i){
                return new int[]{i,map.get(num)};
            }
        }

        throw new IllegalArgumentException("no such num!");
    }

3.map中找到就中止

a.先判断map中有没有这个数

b.如果有,则直接返回

    public int[] twoSum(int[] nums, int target) {
       Map<Integer,Integer> map= new HashMap<Integer,Integer>();
       for(int i=0;i<nums.length;i++){
       int num = target-nums[i];
       if(map.containsKey(num)){
           return new int[]{map.get(num),i};
       }
           map.put(nums[i],i);
   }

        throw new IllegalArgumentException("no such num!");
    }

 

以上是关于Two Sum(两个数的相加)的主要内容,如果未能解决你的问题,请参考以下文章

1. Two Sum

Sum of Two integers

LeetCode -Two Sum

128.Two Sum

Two Sum

两个超大数的相加