L1-两数之和
题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
示例:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
【
首先想到的是双重for循环(解一)
根据题解了解到map(解二)
】
解1:
class Solution { public int[] twoSum(int[] nums, int target) { // int[] nums = {2,7,11,15}; // int target = 13; int[] result = 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){ //System.out.println("[" + i + "," + j + "]"); result[0] = i; result[1] = j; } } } return result; } }
解二:
class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap(); for(int i = 0; i < nums.length; i++) { if(map.containsKey(target - nums[i])){
//非常需要注意的一点:碰见return语句,代码直接结束
return new int[] {map.get(target-nums[i]), i}; } map.put(nums[i], i); } //throw new IllegalArgumentException("NO two sum solution"); return new int[0]; //记得要用return语句,不然报错 } }
【【【解二的解析:
1、使用Map,new一个map对象
2、然后使用for循环,遍历数组中的元素
3、用if语句判断,使用了map.cointainsKey()方法。用来判断是否存在我们要找的target - nums[ ]值
(1)请注意:此时我们表示的target - nums[ ] 是map 中的key值,所以if语句中的return语句中的map.get()返回的就是数组中的下标
4、如果if语句不成立,那么执行map.put( nums[ i ], i );将数组的值作为key值存进去,数组的下标值作为value值存进去
5、如果没有满足的,那么返回一个空数组
】】】
!!!
不是void类型的都要有return语句
也可以不用return语句,用
throw new IllegalArgumentException("NO two sum solution");这一句
gpt给出的解释::根据给出的代码,如果没有找到满足条件的两个数,它会抛出IllegalArgumentException异常。这是因为方法的返回类型是int[],但是在没有找到解决方案的情况下,没有明确的返回语句。
在Java中,如果一个方法声明了一个非void的返回类型,那么在所有可能的代码路径上都必须有一个返回语句。在这种情况下,如果没有找到解决方案,就需要抛出异常或返回一个特殊值来表示无解。如果不添加throw new IllegalArgumentException("NO two sum solution");语句,编译器会检测到代码路径上缺少返回语句,从而导致报错。
因此,为了修复这个错误,可以在循环结束后添加throw new IllegalArgumentException("NO two sum solution");语句,以确保在没有找到解决方案时抛出异常。这样就满足了方法的返回类型为int[]的要求,并提供了处理无解情况的机制。
知识点:
Map:提供的是一种快速查找和访问值的方法,类似于字典或哈希表
- Map接口定义了一组方法来操作键-值对,常见的实现类有HashMap、Tree Map、LinkedHashMap等。
- Map 中的每个键都是唯一的,而值可以重复。通过给定的键,我们可以查找和获取对应的值。这使得 Map 在需要根据键快速查找和访问值的场景中非常有用。
- 常见的 Map 方法和操作:
- put(key,value): 向 Map 中插入一个键-值对。
- get(key):根据键获取对应的值
- containsKey(key):检查Map中是否包含指定的键
- containsValue(value):检查Map中是否包含指定的值
- remove(key):根据键从Map中删除对应的键-值对
- size():获取Map中键值对的数量
- keySet():获取Map中所有键的集合
- values():获取Map中所有值的集合
- entrySet():获取Map中所有键-值对的集合

浙公网安备 33010602011771号