LeetCodeHot100——1.两数之和(详细解答)

我接下来要为大家分享一下我对于算法题目的理解,希望与大家交流,提升自己的算法能力,欢迎大家一起来交流。

题目链接在这里:1. 两数之和 - 力扣(LeetCode)

这个题暴力的解法是非常简单的,作为一道入门题目,我们只需要进行一次循环附加一次内循环,外层负责遍历,内层负责再次遍历寻找是否有值满足内外层指定的两个值之和是否等于target就好了。

但是这种解法过于简单,没法体现我们的code能力,所以我为大家介绍下面这种解法:

我们想一想我们的主要思想就是要查找两个值,和为target的两个值,对于查找而言,我们最常见的最好用的数据结构就是HashMap了,两次循环我们可以把它变成一次搭配HashMap进行配对查找,循环遍历外层的同时,同时向HashMap中添加元素和对应的下标,答案是两个值,在遍历到第一个值的时候我们直接将它放入map中,因为在每次遍历的时候我们都会检查之前进入到Map里的值有没有我们想要的,也就是和当前遍历到的值相加等于target的(map中存在target-当前的值的key),所以在第二个值的时候我们就可以直接返回结果了哈。

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

        return null;
    }
}

这里要记住一些java中常见集合类的方法:

Set:加入元素add(),删除元素remove(),查看是否存在contains()

Map:加入元素put(),删除元素remove(),查看是否存在key:containsKey(),查看是否存在value:containsValue

List:加入元素add(),删除元素remove(),修改指定位置元素set(index,newVal),获取指定下标的值get(),获取指定值的下标indexOf();

Deque:入队offer(),出队poll(),模仿栈:入栈:push(),出栈:pop(),查看栈顶peek();

相关推荐
写代码写到手抽筋1 天前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
xieliyu.1 天前
Java算法精讲:双指针(二)
java·开发语言·算法
jeffer_liu1 天前
Spring AI 生产级实战:裁判员
java·人工智能·后端·spring·大模型
wayz111 天前
Momentum:PSL(心理线指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
努力学习_小白1 天前
ResNeXt-50——学习记录
pytorch·深度学习·学习
小bo波1 天前
枚举实战
java·设计模式·枚举·后端开发·代码重构
8Qi81 天前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划
夜微凉41 天前
三、Spring
java·后端·spring
三品吉他手会点灯1 天前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法