LeeCode热题100(两数之和)

本文纯干货,看不懂来打我!

自己先去看一下第一题的题目两数之和. - 力扣(LeetCode)

简单来说就是让你在一个数组里面找两个数,这两个数的和必须满足等于目标值target才行。

我认为你要是没有思路的话,不妨暴力求解(没有暴力解决不了的),然后再看能不能优化一下,对吧。

思路1.暴力穷举法(2层for循环,把所有可能的情况列举出来,时间复杂度O(n^2)):

代码如下:

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result=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) {
                   result[0]=i;
                   result[1]=j;
                   return result;
                }
            }
        }
        return result;
    }
}

由于暴力穷举使得一些数重复被扫描,那么我们能不能减少这种不必要的重复扫描呢?

思路2:借助哈希表(时间复杂度降到O(N))

假设target=20,nums数组的数为:4,6,13,8,7,9

i 先指向第一个数字4

具体步骤:

步骤1:20-4=16,看看哈希表里面有没有16,显然是没有的,那么把4放到哈希表,然后 i++

步骤2:20-6=14,看看哈希表里面有没有14,显然是没有的,那么把6放到哈希表,然后 i++

步骤3:20-13=7,看看哈希表里面有没有7,显然是没有的,那么把13放到哈希表,然后 i++

步骤4:20-8=12,看看哈希表里面有没有12,显然是没有的,那么把8放到哈希表,然后 i++

步骤5:20-7=13,看看哈希表里面有没有13,显然是有的。结束

如果还不明白,请看****VCR

注意:哈希表里面的key是数字,value是数字对应的下标

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer>storeNums=new HashMap<>(nums.length,1);
int[] result=new int[2];
for(int i=0; i<nums.length; i++){
int another=target-nums[i];
Integer anotherIndex=storeNums.get(another);
if(anotherIndex!=null){
    result[0]=anotherIndex;
    result[1]=i;
    break;
}
else storeNums.put(nums[i], i);
}
return result;
    }
}
相关推荐
小月土星6 小时前
LeetCode 21. 合并两个有序链表 超详细题解(虚拟头结点 + 逐行代码拆解)
算法
oier_Asad.Chen6 小时前
【OI学习笔记】Floyed-Warshall算法解决传递闭包问题
c++·笔记·学习·算法·图论·最短路·传递闭包
国科安芯6 小时前
卫星星务计算机数据管理中SEU容错机制的技术实现研究——以AS32S601存储器ECC架构为例
网络·单片机·算法·fpga开发·架构·云计算·risc-v
孙启超6 小时前
【AI应用开发】Agent 无限 loop(反复调用同一个工具)如何规避?
人工智能·python·算法·llm·agent·loop·ai应用开发
小月土星7 小时前
LeetCode 142. 环形链表 II 超详细题解(快慢指针原理+逐行代码拆解)
算法
dok127 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据
linux·驱动开发·算法
hansang_IR7 小时前
【题解】[COCI 2024/2025 #2] 流明 / Blistavost
c++·算法·动态规划·dp
不正经学生7 小时前
C语言指针进阶:const 和野指针——给指针加锁,向野指针宣战
c语言·开发语言·c++·算法·c#
程序喵大人7 小时前
【C++进阶】STL算法与函数对象 - 01 让算法去处理一段迭代器范围
开发语言·c++·算法·函数对象
Keven_117 小时前
算法札记:二叉树前序、中序、后序遍历及对应序列重要性质
数据结构·算法·深度优先