Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
import java.util.HashMap;
import java.util.Map;
public class Main {
//大体思路是空间换时间解决时间复杂度是n平方的问题
public static int[] twoSum(int[] nums,int target){
Map<Integer,Integer> map = new HashMap<>();
for(int i= 0;i<nums.length;i++){//注意这里不要用等号,否者数组越界
map.put(nums[i],i);
}
for(int i= 0;i<nums.length;i++){
int complement = target - nums[i];
if(map.containsKey(complement)&& map.get(complement)!= i){
return new int[] {i,map.get(complement)};
}
}
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args) {
int [] arr=new int [ ]{1,2,3,4};
int [] result;
result = twoSum(arr,5);
for(int j=0;j<result.length;j++){
System.out.println(result[j]);
}
}
}
本文介绍了一种解决两数之和问题的有效算法。通过使用哈希表来存储数组元素及其索引,可以在O(n)时间内找到两个数,使得它们的和等于目标值。这种方法避免了传统双层循环的时间复杂度过高的问题。

被折叠的 条评论
为什么被折叠?



