問題
給定一個數(shù)組和一個目標值姐仅,獲取相加之合為目標值的數(shù)組中兩個元素的下標并輸出刻盐。
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
思路
1)通過哈希表記錄數(shù)據(jù)劳翰,key為元素值,value為該元素在數(shù)組中的下標佳簸,以便于后續(xù)獲取。
2)遍歷數(shù)組生均,判斷目標值減去當前元素值是否為null。
3)如果不為null马胧,代表map中存在與當前元素值相加等于目標值的元素。蛙粘,則返回當前元素下標 與 map中對應key的value值邻吞。
4)如果不為null组题,代表map中不存在與當前元素值相加等于目標值的元素抱冷,則將當前元素值做為key梢褐,下標作為value,放入map中盈咳。
實現(xiàn)
public class TwoSum {
public static void main(String[] args) {
int[] nums = new int[]{2,7,11,15};
int target = 9;
int[] result = twoSum(nums,target);
System.out.println(Arrays.toString(result));
}
private static int[] twoSum(int[] nums, int target) {
/**
* 定義一個map用于存放數(shù)據(jù) key為元素值,value為元素下標
* 遍歷數(shù)組
* 如果map.get(target-nums[i]) != null. 代表該值存在鸣剪,則返回數(shù)組[nums[i],map.get(target-nums[i])]
* 否則丈积,將當前遍歷得到的值放入map中
*/
Map<Integer,Integer> map = new HashMap<>(16);
for (int i=0;i<nums.length;i++){
if (map.get(target-nums[i]) != null){
return new int[]{i,map.get(target-nums[i])};
}
map.put(nums[i],i);
}
return new int[]{0};
}
}
image.png