欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

LeetCode学习第一题,你可以假设每种输入只

来源: javaer 分享于  点击 16275 次 点评:119

LeetCode学习第一题,你可以假设每种输入只


两数之和题目要求

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

解题思路

利用哈希表,题目要求找到两数之和为target,及找到nums[i],和target-nums[i]在数组中的位置,利用哈希表存储这两个位置的下标。
首先循环这个数组,int complement=target-nums[i];如果在哈希表中找到了complement这个数字则return new[]{HashMap.get(complement),i},如果没有找到complement,则在哈希表中存储这个数字。
代码实现
import java.util.HashMap;
import java.util.Scanner;
public class Solution{
public int[] twoSum(int[] nums,int target){
Map<Integer,Integer> numMap=new HashMap<>();
for(int i=0;i<nums.length;i++){
int complement=target-nums[i];
if(numMap.containsKey(complement){
return new int[]{numMap.get(complement),i};
}
numMap.put(nums[i],i);
}
throw new IllegalArgumentException("No solution found");
}
}

知识装备

  1. 因为哈希表可以快速查找是否存在某个数。比如,对于每个元素nums[i],我们需要找的是target - nums[i]是否存在于数组中。而且,还要记录这个数的下标。这样的话,只需要遍历一次数组,每次检查当前元素是否和之前存入哈希表中的某个数相加等于目标。这样时间复杂度可以降到O(n),因为只需要一次遍历,而哈希表的查找时间是O(1)。这可能是个更好的方法。那具体怎么操作呢?比如,初始化一个哈希表,然后遍历数组中的每个元素。对于当前元素nums[i],计算complement = target - nums[i]。然后检查这个complement是否在哈希表中。如果在的话,说明之前已经有一个数可以和当前数相加等于target,那么返回这两个数的下标。如果不在的话,就将当前元素的值作为键,下标作为值存入哈希表,这样后续的元素可以查找这个值。
  2. return new int[]{NumMap.get(complement),i};这个的意思是返回当前元素的索引和补数的索引。
  3. 在 Java 中,Map<Integer, Integer> numMap = new HashMap<>(); 这行代码的作用是创建一个哈希表(HashMap),用于存储键值对(Key-Value)。
    Map<Integer, Integer>:声明一个 Map 接口的变量,键(Key)和值(Value)的类型均为 Integer。
    Map<Key,Value>
    new HashMap<>():实际创建的是一个 HashMap 对象,它是 Map 接口的实现类,用于存储键值对。
    Java 泛型不支持基本类型(如 int),必须使用包装类 Integer。
  4. 在 Java 的 Map 接口中,containsKey 方法用于检查哈希表中是否存在某个特定的键。功能:判断 Map 中是否包含指定的键(Key)。返回值:true:键存在;false:键不存在。
  5. 在 Java 中,throw new IllegalArgumentException("No solution found"); 这行代码的作用是在未找到符合条件的结果时,抛出一个明确的运行时异常,以提示调用方输入存在问题或算法逻辑未能满足预期。异常类型:IllegalArgumentException 是 Java 内置的运行时异常(RuntimeException 的子类),通常用于表示方法接收到了非法或不合适的参数。
  6. get(key) 根据键获取值 1 map.get(7) → 返回索引
    put(k,v) 存入键值对 2 map.put(2, 0)
    containsKey(key) 检查键是否存在 1 map.containsKey(7) → true/false
相关栏目:

用户点评