LeetCode每日1题--两数之和

简介: LeetCode每日1题--两数之和

前言

算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!


画图软件


OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!


笔记软件


Typoral


题目


解析


一些限制

为什么不能使用数组和set来做哈希法呢?

我们来看下它们的局限

  • 首先呢数组的大小是会受限制的,如果你的元素也很少的话,那又会很浪费
  • set呢它是一个集合,里面存放的元素只能是一个key,而这个两数之和的题目,不仅要判断y是否存在而且还要记录它y的下标位置,所以set也不能用

此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下标。

哈希

又是找目标的对吧,那就要想到用哈希法了

思路

  1. 生成int数组存放结果的数组下标
  2. 临界条件,判断一些特殊情况(数组为空、数组长度为0)
  3. 创建HashMap,它的作用就是判断目标值target减去数组中的值得到的值是否在map集合内
  4. 存在于集合内,返回数组下标,不存在就把值放进去。放进去的规则key为target减去数组中的值,value为该值索引下标
  5. 通过循环,不断的让taget减去数组中的每一个数,把得到的值进行判断看它们是否在map集合中,在的话设置res数组返回数组下标,不在的话把得到的结果放到map中,之后继续重复

完整代码如下:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        if(nums == null || nums.length == 0){
            return res;
        } 
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            int temp = target - nums[i];
            if(map.containsKey(temp)){
                res[1] = i;
                res[0] = map.get(temp);
            }
            map.put(nums[i],i);
        }
        return res;
    }
}



相关文章
|
6天前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
6天前
|
存储
LeetCode热题 首题 两数之和
LeetCode热题 首题 两数之和
21 1
|
6天前
|
索引 容器
双指针解决leetcode1两数之和
双指针解决leetcode1两数之和
22 0
|
6天前
|
存储 算法 Java
小白刷力扣之两数之和
小白刷力扣之两数之和
|
6天前
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
6天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
6天前
|
算法 C语言 C++
|
6天前
leetcode代码记录(有序数组两数之和
leetcode代码记录(有序数组两数之和
14 0
|
6天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
22 0
|
6天前
|
算法
LeetCode-1:两数之和
LeetCode-1:两数之和