問題:
給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的兩個下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。
思路
首先遍歷一次整數陣列,將陣列下標和值建立雜湊表,再從頭遍歷一次雜湊表,先得出當前讀取的位置i上對於target的差complement,得到後通過檢視該值是否儲存在雜湊表的value中,若存在,返回該值的key,否則讀取下一元素。
技能點
1.java中HashMap結構知識點:
宣告語句: Map<Integer, Integer> map = new HashMap<>();
新增內容: map.put(key,value);
鑑定存在: map.containsValues(value); //本例是把num[i]作為value
map.containsKey(key);
找到下標: map.get(value); //根據value返回下標
返回陣列: return new int[]{num1,num2};
最終程式碼:
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
//建立hashmap
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
//在雜湊表中遍歷每個元素,找到可能與之匹配成target的下標
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsValues(complement) && map.get(complement) != i) {
return new int[] { i, map.get(complement) };
}
}
throw new IllegalArgumentException("No two sum solution");
}