力扣启蒙 - 开启算法的世界

Java学习之道

共 2647字,需浏览 6分钟

 · 2021-05-01

点击上方 Java学习之道,选择 设为星标

每天18:30点,干货准时奉上!

Part1力扣

刷力扣,刷力扣,力扣究竟是什么呢?

力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。

而刷力扣也就是在力扣的题库里刷算法题。

Part2力扣启蒙

下面来引入力扣的启蒙题来感受一下算法题的魅力吧。

1力扣第一题:

两数之和

给定一个整数数组 nums 和一个整数目标值  target,请你在该数组中找出 和为目标值 的那 两个整数,并返回它们的 数组下标

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

2解题思路

  • 暴力解法

很多人新手看到这些题目,第一眼就是暴力跑法对吧? 但是都来练算法了暴力破解不是在真的没办法的情况下就算了。

  • 哈希映射

让我们来看看这道题比较优等的解法吧 (算法只有更好,没有最好)

什么是哈希映射

哈希表的结构就是键值对的形式 >> [key -- value] 我们可以利用这个特殊的数据结构来处理我们这道题目

先来看看 Java的 HashMap API 中一个 方法.

方法要求传入一个键,会返回在该哈希表中是否存在跟传入的键对应的映射关系. 也就是说我们可以将没有找的数组元素放进哈希表中,让后面的元素去匹配。

利用for循环来处理题目给出的数组,题目给出了一个 target, 我们就利用这个 target 和 数组中的数字相减来得到一个目标值,然后在哈希表中查找是否有这个值,有则可以找到题目所要的两个目标索引,没有找到的话就将值再 put 进表中。

题解

public int[] twoSum(int[] nums, int target) {
        /* map的键为数组的元素 值为数组的元素下标 */
        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};
            }
            /* 遍历开始时为空表,就直接将第一个元素put进表 */
            /* 没有找到对应的映射就进行put */
            map.put(nums[i], i);
        }
        /* 数组中没有符合的两个数字的情况,
        但是题目已经帮我们排除了这个可能性 */

        return null;
    }

测试结果

该测试结果是在IDEA中通过 leetcode 插件自动生成题目提交测试代码的,不会使用 leetcode插件的也可以通过 [刷leetcode神器] IDEA 插件 leetcode editor 查看。

-- END --

 | 更多精彩文章 -


加我微信,交个朋友
长按/扫码添加↑↑↑

浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报