点击上方 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 —