一、題目名稱java
Two Sum(兩個數的和)數組
二、題目地址code
https://leetcode.com/problems/two-sum/ci
三、題目內容leetcode
Given an array of integers, return indices of the two numbers such that they add up to a specific target.get
You may assume that each input would have exactly one solution.input
Example:
io
Given nums = [2, 7, 11, 15], target = 9, Because nums[] + nums[] = 2 + 7 = 9, return [0, 1].
題目大體意思:給定一個整型數組,返回它的其中兩個元素的下標,使得這兩個元素的和等於目標元素的值class
你能假設每一個輸入都能獲得精確的結果。循環
四、題目分析
首先,題目是在數組中找兩個元素的和等於目標元素,返回的倒是兩個元素的下標;從而能夠想到使用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; }