題目:給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù)登刺,并返回他們的數(shù)組下標(biāo)。你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案应闯。但是涡贱,你不能重復(fù)利用這個(gè)數(shù)組中同樣的元素瞻惋。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因?yàn)?nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解題思路:
這道題如果采用暴力的方法來(lái)解決的話儡首,就是通過(guò)兩個(gè)for循環(huán)來(lái)遍歷給定的數(shù)組渣玲。這樣的做比較費(fèi)時(shí)。比較好的方式是采用HashMap的方式來(lái)解決該問(wèn)題夺克。通過(guò)HashMap來(lái)存儲(chǔ)數(shù)組中的數(shù)組和對(duì)應(yīng)的下標(biāo)箕宙。最后通過(guò)兩次調(diào)用HashMap即可獲得兩個(gè)元素的下標(biāo)。
import java.util.HashMap;
/*
* @author: mario
* @date: 2019/1/4
* 兩個(gè)數(shù)之和
* **/
public class Problem01 {
public int[] twoSum(int[] nums, int target){
if(nums.length == 0){
return nums;
}
int[] result = new int[2];
HashMap<Integer, Integer> hash = new HashMap<>();
for(int i = 0; i < nums.length; i++){
hash.put(nums[i], i);
}
for(int i = 0; i < nums.length; i++){
int temp = target - nums[i];
if(hash.containsKey(temp) && hash.get(temp) != i){
result[0] = i;
result[1] = hash.get(temp);
}
}
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {2,7,11,15};
Problem01 pb = new Problem01();
int[] result = new int[2];
result = pb.twoSum(nums, 9);
System.out.println("result:"+result[0]);
System.out.println("result:"+result[1]);
}
}
leetcode題目地址: https://leetcode-cn.com/problems/two-sum/