《LeetCode刷题》—1.两数之和

简介: 《LeetCode刷题》—1.两数之和

《LeetCode刷题》——1.两数之和

@[toc]

一、题目内容

原题连接:https://leetcode.cn/problems/two-sum/

题目:

在这里插入图片描述

默认代码模块:

class Solution {
    public int[] twoSum(int[] nums, int target) {

    }
}

二、个人答案(Java)

思路:题目要求是给一个整型的数组和目标值,判断数组中的那两个元素相加等于目标值,再把这两个数的脚标放进一个数组里面,返回这个数组,我想到的是for循环一下子就可以解决,相当于假设给定一串数,12345,遍历一下他们两两组合是否等于目标值,不能重复,就是1分别和后面的数字2345匹配,然后2又和2后面的数字345匹配......以此类推,匹配到了和等于目标值就放进一个数组里面,返回该目标值即可。没有匹配到就返回null

在这里插入图片描述

代码:

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

三、官方答案(Java)

ps:官方给的方法一也是for循环

方法二如下(官方答案,已备注出处):

思路及算法

注意到方法一的时间复杂度较高的原因是寻找 target - x 的时间复杂度过高。因此,我们需要一种更优秀的方法,能够快速寻找数组中是否存在目标元素。如果存在,我们需要找出它的索引。

使用哈希表,可以将寻找 target - x 的时间复杂度降低到从 O(N)O(N)O(N) 降低到 O(1)O(1)O(1)。

这样我们创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

代码

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

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
3天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
8 1
|
3天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
6 0
|
3天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
8 0
|
3天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
21 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
3天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
3天前
|
存储 算法 测试技术
|
3天前
|
算法 C语言 C++
|
4天前
leetcode代码记录(有序数组两数之和
leetcode代码记录(有序数组两数之和
11 0
存储 算法 C语言
14 1

热门文章

最新文章