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

算法搬运工

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

算法搬运工

(力扣)1.给定一个数组和一个目标值,在数组中找到和等于目标值的两个整数,并返回这两个整数的下标,其中数组中的元素不能重复出现。(两数之和)
例如:

list = [4,6,8]  num = 10

[0,1]

因为4+6=10,也就是list[0]+list[1]=10

所以输出[0,1]

方法一:最简单直接的就是使用两个for循环对数组进行遍历(缺点:两个for循环的时间复杂度会很大)

​
    public int[] twoSum(int[] list, int num) {
       
        for (int i = 0; i < list.length - 1; i++) {
            for (int j = i + 1; j < list.length; j++)
                if (list[i] + list[j] == num)
                    return new int[]{i, j};
        }
        return new int[]{-1, -1};
     }

方法二:使用哈希表,哈希表是根据键(key)而直接访问在内存存储位置的数据结构,也就是说,它通过计算一个关于键值的函数,将所需查询的数据 映射 到表中一个位置来访问记录,这加快了查找速度。

思路:跟方法一相似,遍历数组并使用put方法将list的整数和相对应下标存储到哈希表中,然后在数组中寻找num-list[i],使用哈希表可以直接获取num-list[i]在数组中的位置,最后返回两个下标就可以了。

    public int[] twoSum(int[] list, int num) {
        Map m = new HashMap<>();
        for (int i = 0; i < list.length; i++) {
            if (m.get(num - list[i]) != null) {
                return new int[]{m.get(num- list[i]), i};
            }
            m.put(list[i], i);
        }
        return new int[]{0, 0};
    }

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

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

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