題目
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù)都伪,并返回他們的數(shù)組下標(biāo)钱床。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是妖啥,數(shù)組中同一個(gè)元素不能使用兩遍霉颠。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因?yàn)?nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/two-sum
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)迹栓,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處掉分。
解法1:一遍哈希表
數(shù)學(xué)知識(shí)+哈希表
遍歷的數(shù)組元素的值
求出與目標(biāo)數(shù)目之差
與放在哈希表中的key對(duì)比
相等則 利用哈希表中存儲(chǔ)數(shù)組的信息(key,i)和當(dāng)前遍歷的數(shù)組元素信息克伊,創(chuàng)建數(shù)組
返回?cái)?shù)組
無(wú)則返回null酥郭。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map=new HashMap<>();
for(int i =0 ; i<nums.length;i++){
int temp=target-nums[i];
if(map.containsKey(temp)){
return new int[]{map.get(temp),i};
}
map.put(nums[i],i);
}
return null;
}
}