LeetCode1.两数之和

1.两数之和

目录

一、暴力枚举

这道题最先想到的就是使用两层for循环进行暴力枚举

外层for循环从数组的0号索引(指针i)位置开始,遍历整个数组

内层for循环从当前指针i+1的位置开始,遍历后续整个数组

将内外两层for循环求和,如果结果等于target,则返回new int[i,j]

java 复制代码
    public int[] twoSum(int[] nums, int target) {
        //两层for循环解法
        int sum = 0;
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }
            }
        }
        return null;
    }

二、哈希表

首先,我们应该明白在什么样的情况下使用哈希表法

当我们要查询一个元素是否出现过,或者一个元素是否在集合中的时候就第一时间要想到使用哈希表法

在本题中,我们需要一个集合来存放我们遍历过的元素,然后在第二次遍历数组的时候去访问这个集合,查看某元素是否被遍历过,也就是是否出现在这个集合

此时我们就应该想到要使用哈希法

同时,我们不仅要知道元素有没有被遍历过,还要知道这个元素对应的下标,使用key-value结构,key存放元素值,value存放下标,所以我们考虑使用hashMap

map的目的是用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)

接下来是key和value分别表示什么

在这道题中,我们需要给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标

那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存放数组的下标

所以,map中的存储结构为{key:数据元素,value:数组元素对应的下标}

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到了匹配对

如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素

java 复制代码
    public int[] twoSum(int[] nums, int target) {
        int[]ans = new int[2];
        if(nums==null||nums.length==0){
            return ans;
        }
        Map<Integer,Integer> map = new HashMap();
        for(int i=0;i<nums.length;i++){
            //遍历当前元素,并在map中寻找是否有匹配的key
            int temp = target-nums[i];
            if(map.containsKey(temp)){
                ans[0] = i;
                ans[1] = map.get(temp);
                break;
            }
            //如果没找到的话,就将当前元素放入map中
            map.put(nums[i],i);
        }
        return ans;
    }
相关推荐
melck3 分钟前
liunx日志查询常用命令总结
java·服务器·网络
SweetCode5 分钟前
裴蜀定理:整数解的奥秘
数据结构·python·线性代数·算法·机器学习
守护者1708 分钟前
JAVA学习-练习试用Java实现“实现一个Hadoop程序,使用Hive进行复杂查询和数据筛查”
java·学习
程序员 小柴13 分钟前
docker的与使用
java·docker·eureka
ゞ 正在缓冲99%…18 分钟前
leetcode76.最小覆盖子串
java·算法·leetcode·字符串·双指针·滑动窗口
xuanjiong19 分钟前
纯个人整理,蓝桥杯使用的算法模板day2(0-1背包问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个
算法·蓝桥杯·动态规划
Seven9733 分钟前
【Guava】并发编程ListenableFuture&Service
java
WannaRunning33 分钟前
浅谈Tomcat数据源连接池
java·oracle·tomcat
惊鸿.Jh38 分钟前
【滑动窗口】3254. 长度为 K 的子数组的能量值 I
数据结构·算法·leetcode
明灯L39 分钟前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题