L1-两数之和

发布时间 2023-11-03 23:17:08作者: 翻斗花园小美Q

题目描述:给定一个整数数组 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中所有键-值对的集合