leetcode万能解法,leetcode编程技巧

首页 > 机动车 > 作者:YD1662023-11-03 11:03:21

在这个系列的博客中,我们根据LeetCode官方给出的每个题目的出现频率,整理并收录了每个类别里高频出现的题目,从简单到中等再到困难,为你提供解题技巧和最佳实践。我们将介绍常见的算法思想,如贪心算法、动态规划、回溯算法等,希望能帮助你提高算法水平,成为你进入人工智能行业敲门砖。


leetcode万能解法,leetcode编程技巧(1)

1:两数之和(难度1/频率5)

题目链接:https://leetcode.cn/problems/two-sum/

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] nums[1] = 2 7 = 9

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6

输出:[1,2]

解题思路

很明显暴力的解法是两层for循环查找,时间复杂度是O(n^2)。当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

在本题中我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素,对应的空间和时间复杂度均为O(n)。

leetcode万能解法,leetcode编程技巧(2)

leetcode万能解法,leetcode编程技巧(3)

leetcode万能解法,leetcode编程技巧(4)

leetcode万能解法,leetcode编程技巧(5)

class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: records = dict() for index, value in enumerate(nums): if target - value in records: # 遍历当前元素,并在map中寻找是否有匹配的key return [records[target- value], index] records[value] = index # 遍历当前元素,并在map中寻找是否有匹配的key return []题目总结

本题其实有四个重点,要真正理解这些才能透彻理解该题目:

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.