题目描述:给定一个整数数组 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 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语句,不然报错 } }
!!!
不是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中所有键-值对的集合
标签:语句,Map,target,nums,int,L1,new,两数 From: https://www.cnblogs.com/18191xq/p/17784325.html