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

leetcode -- 1 两数之和

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

leetcode -- 1 两数之和

解法一:暴力穷解(时间复杂度高达O(n^2),不推荐)

  执行时间 41ms   内存消耗41.1 MB

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] arr = new int[2];
        for(int i = 0;i < nums.length;i++){
            for(int j = i +1;j < nums.length;j++){
                if(nums[i] + nums[j] == target){
                    arr[0] = i;
                    arr[1] = j;
                    break;
                }
            }
        }
        return arr;
    }
}

        解法一的两层循环,将同一数组遍历了两次,造成了不必要的时间浪费,引入HashMap,将遍历过的值保存起来,用 target 与当前 nums[i] 的差值与 map 中的 key 做对比。如果相同,则返回差值对应的 value 和 i,如果不同,则将当前 nums[i] 的值和下标 i 存入map中。代码如下:

解法二:引入HashMap

  执行时间 2ms   内存消耗41.4 MB

class Solution {
    int diff;
    public int[] twoSum(int[] nums, int target) {
        Map map = new HashMap<>();
        //创建一个数组,用来存放最终结果
        int[] arr = new int[2];
        //遍历nums[]数组
        for(int i = 0;i < nums.length;i++){
            //计算当前nums[]的值与target值的差值
            diff = target - nums[i];
            //看diff值是否在map中
            if(null  != map.get(diff)){
                arr[0] = i;
                arr[1] = map.get(diff);
                break;
            }else{
                //如果当前diff不存在map,则将nums[]值(key) - i(value) 存入map
                map.put(nums[i],i);
            }
        }
        return arr;
    }
}

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

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

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