平常新坑,沉迷學習,沒法自拔java
本身實現的代碼,在可解讀的前提下盡力優化.git
歡迎訪問個人我的網站訪問此文章github
LeetCode:https://leetcode.com/problems/two-sum/數組
LeetCodeCn:https://leetcode-cn.com/problems/two-sum/submissions/bash
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。 你能夠假設每種輸入只會對應一個答案。可是,你不能重複利用這個數組中一樣的元素。學習
給定 nums = [2, 7, 11, 15], target = 9測試
由於 nums[0] + nums[1] = 2 + 7 = 9 因此返回 [0, 1]優化
遍歷nums中的每一個元素x,查找是否存在target-x的元素網站
簡單來講就是在遍歷的時候將遍歷過的x存入HashMap中,已x的值爲key,x所在的位置爲vaue.在遍歷新的元素的時候檢查target-x所對應的元素是否包含在HashMap中,若是存在的話就能直接獲取到當前x的位置和target-x的位置.ui
如下是個測試用例,如今[1,2,7,11,15]的數組中尋找其中哪兩個元素和爲9.
根據思路,咱們開始遍歷此數組
當x = 0時候, 目標target - x = 8, 咱們在check中查找是否存在key爲8的元素. 此時咱們發現沒有key爲8的元素,將key = 1,value = 0存入check的HashMap中.
移到下一個元素, x = 2,彌補target - x = 7, 在check中也沒有找到key爲7的元素,和上一步同樣,將key = 2, value = 1存入check中.
移到下一個元素, x = 7, 目標target - x = 2,在check中找到了key爲2的數據,此時當前 x = 7的位置爲2,check中key爲2對應的value爲1, 也就是說次數組第1項目和第2項所對應的值之和爲target
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> check = new HashMap<>();
int[] position = new int[2];
for (int i = 0; i < nums.length; i++) {
int index = target - nums[i];
if (check.containsKey(index)) {
position[0] = check.get(index);
position[1] = i;
return position;
} else {
check.put(nums[i], i);
}
}
return position;
}
複製代碼
相關代碼歡迎你們關注並提出改進的建議