广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    一起LeetCode--两数之和

    来源:网络收集  点击:  时间:2024-05-11
    【导读】:
    算法题目为:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。工具/原料moreJava , Eclipse方法/步骤1/2分步阅读

    方法一:暴力求解

    该方法非常简单,就是两层for循环,遍历所有组合获取有效解,代码如下:

    /** * 暴力求解法 * @param nums 源数组 * @param target 目标值 * @return */ public int forceFind(int nums, int target) { for(int i=0; inums.length; ++i) { for(int j=i+1; jnums.length; ++j) { if(target == (nums + nums)) { return new int {i, j}; } } } throw new IllegalArgumentException(No Answer!); }

    运行效果如图示。

    时间复杂度 : O(n²)

    空间负责度 : O(1) ,即在算法运行过程中,只额外使用了常量级的存储空间

    2/2

    方法二: 哈希求解法

    对于该问题而言,其本质上是一个精确查找问题,而对于精确查找问题来说,时间复杂度最好的数据结构就是哈希表(或散列表),其时间复杂度为 O(1),那这个问题能否引入哈希表来解决呢?答案是可以的,代码如下:

    /** * 通过使用hashmap+一次遍历获取结果 * @param nums 源数组 * @param target 目标值 * @return */ public int hashFind(int nums, int target) { MapInteger, Integer num2IndexMap = new HashMapInteger, Integer(); for(int i=0; inums.length; i++) { // 计算当前数值和目标值之间的差距 int complement = target-nums; // 确认这个差值是否就是我们数组的中一员,如果是,则找到结果 if(num2IndexMap.containsKey(complement)) { return new int {i, num2IndexMap.get(complement)}; } // 如果没有找到匹配值,则将自己加入到map中,等待其他数值进行匹配 num2IndexMap.put(nums, i); } throw new IllegalArgumentException(No Answer!); }

    运行效果图示。

    时间复杂度 : O(n) , 我们只遍历了一遍数据源

    空间负责度 : O(n) ,哈希表在最差情况需要将数据源所有数据全部存储一遍

    两数之和算法
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_737627.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 12:14:52  耗时:0.026
    0.0262s