• LeetCode第1题:两数之和


    生命无罪,健康万岁,我是laity。

    我曾七次鄙视自己的灵魂:

    第一次,当它本可进取时,却故作谦卑;

    第二次,当它在空虚时,用爱欲来填充;

    第三次,在困难和容易之间,它选择了容易;

    第四次,它犯了错,却借由别人也会犯错来宽慰自己;

    第五次,它自由软弱,却把它认为是生命的坚韧;

    第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;

    第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。

    LeetCode第一题:两数之和

    一、题目

    给定一个整数 数组nums 和一个整数 目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
    你可以按任意顺序返回答案。
    示例 1:

    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]
    解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

    实例就可以看出 就是取nums数组中的值 进行组合相加 结果等于 target,并记录索引

    二、结题

    方法一、暴力破解

    时间复杂度: O(n²)

    使用两层for循环,外层循环计算当前元素与 target 之间的差值,内层循环寻找该差值,若找到该差值,则记录并返回两个元素的下标。

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            int[] res = new int[2];
            for (int i = 0; i<nums.length; i++) {
                for (int j = i+1; j<nums.length; j++) {
                    if (nums[j] == target - nums[i]) {
                        res[0] = i;
                        res[1] = j;
                        return res;
                    }
                }
            }
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    方法二、哈希表

    • 哈希查找元素的时间复杂度为 O(1),所以可以利用hashmap 降低时间复杂度 遍历数组 nums,i
    • 遍历数组 nums,每个值都判断map中是否存在 target-nums[i] 的 key 值 如果存在则找到了两个值,如果不存在则将当前的 (nums[i],i) 存入 map 中,继续遍历直到找到为止 如果最终都没有结果则抛出异常

    时间复杂度: O(n) < O(n²)

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            Map<Integer,Integer> map = new HashMap();
            int[] res = new int[2];
            for(int i = 0;i < nums.length;i++){
               // 根据key判断map中是否有当前数组的值
               // target = nums[i] + key
               if(map.containsKey(target-nums[i])){
                   res[0] = map.get(target-nums[i]);
                   res[1] = i;
                   return res;
               }else{
                   map.put(nums[i],i);
               }
            }return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    昨天很重要,它构建了我们的记忆;明天很重要,它让我们有了憧憬和梦想。但最重要的,还是今天,是我们今天要做的一切。人生苦短,我们要告诉自己:怀着积极心态过好每一个今天;学会给心灵疗伤,不要躲藏在昨天的阴影中;做该做的事,明天自然会来。共勉!我是Laity,正在前行的Laity。

  • 相关阅读:
    Java架构师分布式搜索数据准确性解决方案
    python基础面试题
    【SLAM】基于rrt_explore的移动机器人自主建图
    HTTP与SOCKS-哪种协议更适合您的代理需求?
    自媒体人一般会从哪里找素材呢?
    每天一道算法题:125. 验证回文串
    Web 3.0与去中心化应用:未来的互联网是什么样子?
    java计算机毕业设计基于安卓Android/微信小程序的英语单词学习APP系统
    【深度学习】4-梯度确认时遇bug:写了个糟糕的softmax函数
    搭建solidity开发环境(以太坊)
  • 原文地址:https://blog.csdn.net/duyun0/article/details/127805127