1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
方法一:循环遍历
public int[] twoSum(int[] nums, int target) {
int p=0,q=0;
int[] newNums=new int[2];
for (int i = 0; i < nums.length-1; i++) {
for (int j = i+1; j < nums.length; j++) {
if (nums[i]+nums[j]==target){
p=i;
q=j;
}
}
}
newNums[0]=p;
newNums[1]=q;
return newNums;
}
方法二:哈希表 以空间换时间
- 初始化一个空的哈希表map,用于存储数字和对应的索引。
- 遍历数组 nums,对于每个数字 nums[i]:
-- 计算它的补数(j = target - nums[i])检查哈希表中是否已经存在这个补数:
-- 如果存在,说明找到了两个数,直接返回它们的索引。
-- 如果不存在,将当前数字nums[i] 和它的索引 i 存入哈希表,继续遍历。 - 如果遍历结束后没有找到符合条件的两个数,返回空数组。
public static int[] twoSum2(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
//计算所需要的补数
int j=target-nums[i];
//如果补数存在 返回补数索引和当前索引
if (map.containsKey(j)) {
return new int[]{map.get(j),i};
}
//补数不在 将当前数字和索引存入哈希表
else {
map.put(nums[i],i);
}
}
return new int[0];
}

浙公网安备 33010602011771号