LeetCode-第一题:Two Sum

题目

题目

题目的意思是在一个整形数组中查找连个数字,使其和等于给定的目标。并返回给出这两个数出现的位置。

分析

初读题目会想到直接使用两层遍历的办法,但是一到两层遍历就会时间复杂度增加。其实可以考虑使用映射的方法,将映射的键设置为值,将映射的值设置为该值在映射中出现的位置。这样做的目的在于映射的查找时间为常数,查找到数的位置相当快,具体的逻辑见代码。

代码

下面的代码表示使用双层循环得到的答案。

public int[] twoSum(int[] nums, int target)
{
    int arraySize=nums.length;
    for(int i=0;i<arraySize;i++)
    {
        for(int j=i+1;j<arraySize;j++)
        {
            if(nums[i]+nums[j]==target)
            {
                int[] result={i,j};
                return result;
            }
        }
    }
    return null;
}

下面的代码表示使用映射结构实现的代码。

public int[] twoSum(int[] nums, int target)
{
    int arraySize=nums.length;
    HashMap<Integer,Integer> map=new HashMap<Integer, Integer>();
    for(int i=0;i<arraySize;i++)
    {
        if(map.containsKey(target-nums[i]))//判断是否包含key
        {
            int[] result={map.get(target-nums[i]),i};
            return result;
        }
        else
        {
            map.put(nums[i],i);
        }
    }
    return null;
}
posted @ 2017-10-11 09:57  baixiaoshuai  阅读(110)  评论(0编辑  收藏  举报