leetcode题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
解题想法:
1、可以将每个数字依次与它后面的数字相加并与目标值比较,若正确则返回数组下标,for循环嵌套
2、声明一个Map,key存数组的索引值,value存数组下标,循环遍历数组,每次用目标值减去当前值得到差值,查看Map中有没有这个差值,若没有则将当前的索引值nums[i]存入key,i存入map的value,若有则返回当前数组下标,和 作为key的差值在map中对应的value--》即差值的数组下标
方法一:
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i=0; i<nums.length; i++){
//第二层循环数组下标为i的后一位开始
//以i与后面的数相加并判断
for(int y=i+1; y<nums.length; y++){
int z = nums[i] + nums[y];
if(z == target){
int[] result = {i,y};
return result;
}
}
}
return null;
}
}
执行结果:
方法二:
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0; i<nums.length; i++){
if(map.containsKey(target-nums[i]) ){
return new int[]{i,map.get(target-nums[i])};
}
map.put(nums[i],i);
}
return null;
}
}
执行结果: