栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode 1 两数之和

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 1 两数之和

[题目描述]
给定一个整数数组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]

提示

2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案

[个人见解]
根据题意有如下思路:
这个题目给我们的是一个整数数组,一个目标数target,需要我们在数组中找出两个非同一下标的数字,且这两个数字之和刚好等于目标数target。这里介绍两种思路:

思路一:
1.暴力解法:既然需要寻找两个和为target的整数,并且下标不同,那么我们就采用遍历方式,一组一组的去找,直到找到为止。此方法的实现需要两个for循环,时间复杂度达到了O(n^2),不推荐。
具体代码见[Java Solution One]

思路二:
虽然暴力解法简单明了,但是消耗时间过多,那么有没有更加完美一点的解决方案呢?答案肯定是有的。现在我们要做的其实就是在数组中找出A、B两个数字,使得A+B=C成立。通过式子可以发现,A、B每次都是成对出现(下标不一致),那么通过这个成对我们可以想到一种常见的结构,也就是Map结构。说到这里肯定很多人已经豁然开朗~
1.遍历数组,每次拿到一个数组中的整数A,然后通过target-A,得到的就是我们需要的另一个整数B。
2.定义一个Map用于存放数组中的数字以及对应得下标,在Map中将B当做Key来判断是否存在,如果存在返回下标;若不存在,则将当前数A以及下标存入Map中。
具体代码见[Java Solution Two]

[Java Solution One]

public int[] twoSum(int[] nums, int target) {
  for(int i=0; i target) {
              continue;
          }
          if(nums[i]+nums[j] == target) {
              int arr[] = {i,j};
              return arr;
          }
      }
  }
  return new int[0];
}

[Java Solution Two]

public int[] twoSum(int[] nums, int target) {
    Map map = new HashMap<>();
    int len = nums.length;
    for (int i = 0; i < len; i++) {
        if (map.containsKey(target-nums[i])) {
            return new int[]{i, map.get(target - nums[i])};
        } else {
          map.put(nums[i], i);
        }
    }
    return new int[]{};
 }

希望本文可以对正在阅读的你有所帮助,在学术思想上擦出火花的可以评论区交流~
感谢阅读~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号