LeetCode----Two Sum(两个数的和)

1、题目名称

     Two Sum(两个数的和)

2、题目地址

https://leetcode.com/problems/two-sum/

3、题目内容

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[] + nums[] = 2 + 7 = 9,
return [0, 1].

题目大致意思:给定一个整型数组,返回它的其中两个元素的下标,使得这两个元素的和等于目标元素的值

你能假设每个输入都能得到精确的结果。

4、题目分析

首先,题目是在数组中找两个元素的和等于目标元素,返回的却是两个元素的下标;从而可以想到使用Map集合,因为map集合存储数据是键值对的形式,即map集合的键存储找到的元素,值存储找到的元素的下标。

主要思路是:遍历数组得到数组中的每一个元素,再判断集合中是否包含该元素的键,

                       如果不包含:将目标元素减去该元素的差作为键,该元素的下标作为值存到集合中。

                        如果包含:在集合中找到这个元素作为键所对应的值,并将这个值存到新创建的数组中作为第一个元素。

                                        然后将这个元素的下标作为第二个原素存到新建的数组中。

                                        然后break跳出循环。

主要代码如下:

public int[] twoSum(int[] nums, int target) {

        int[]result = new int[2];

        HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();

        for(int i=0;i<nums.length;i++){

            if(hm.containsKey(nums[i])){

                result[0] = hm.get(nums[i]);

                result[1] = i;

                break;

            }else{

                hm.put(target-nums[i],i);

            }

        }

        return result;

    }

你可能感兴趣的:(HashMap)