算法要求
给定一个整数数组
nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那 两个 整数,并返回它们的数组下标
java代码示例
public int[] twoSum(int[] nums,int target){
Map<Integer,Integer> hashmap=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(hashmap.containsKey(target-nums[i])){
return new int[]{i,hashmap.get(target-nums[i])};
}else{
hashmap.put(nums[i],i);
}
}
return new int[0];
}
代码分析
该方法使用了哈希表来实现,首先创建了一个空的哈希表 hashmap,然后遍历整数数组 nums,对于每个元素 nums[i],它判断哈希表中是否存在一个键为 target-nums[i] 的元素.如果存在,就说明找到了符合要求的两个数,它将它们的下标 i 和哈希表中对应的值 hashmap.get(target-nums[i]) 放入一个长度为 2 的整数数组中并返回。如果不存在,就将当前元素 nums[i] 和它的下标 i 存入哈希表中。如果遍历完整个数组 nums 后仍然没有找到符合要求的两个数,就返回一个长度为 0 的整数数组。
这个算法的时间复杂度为 O(n),其中 n 是整数数组 nums 的长度,因为它只需要遍历一遍整个数组,每次在哈希表中查找和插入操作的时间复杂度都是 O(1)。