0、开个博客记录一下学习过程,就这样。
第一次打开力扣,不知道从怎么写代码,怎么执行,鼓捣了半天,终于知道在哪写了。。。(菜的无与伦比不是浪得虚名)一般题目都是定义一个函数,把函数补充完整就可以了。知道这个之后就先随便选了个简单的,写完,执行,报错,改错,执行,报错,,,看了看别人的代码,看不懂。。。算了,我还是从第一题开始吧!
题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
看上去不是很难,两次遍历,返回相加结果成立的,几步就写完了。如下:
class Solution: def twoSum(self, num: List[int], target: int) -> List[int]: for j in range(len(num)-1): for i in range(j+1,len(num)): if num[i] + num[j] == target: li = [j,i] return li
时间复杂度:O(n²)。用[2, 7, 11, 15],9测试也没有出现问题,我就提交上去了。结果提交结果显示"超出时间限制",一看测试用的列表,一个页面都放不下。。。
我去网上搜答案的过程中突然想到另一种方法,马上就去改了以下代码,如下:
class Solution: def twoSum(self, num: List[int], target: int) -> List[int]: for j in range(len(num)-1): a = target - num[j] for i in range(j+1,len(num)): if num[i] == a: li = [j,i] return li
时间复杂度:O(n²)。测试成功,提交也成功!
不过看起来效率好像低了点,时间复杂度有点大?去网上搜了以下其他答案,如下
class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ n = len(nums) #创建一个空字典 d = {} for x in range(n): a = target - nums[x] #字典d中存在nums[x]时 if nums[x] in d: return d[nums[x]],x #否则往字典增加键/值对 else: d[a] = x #边往字典增加键/值对,边与nums[x]进行对比
时间复杂度:O(1)。
我还是太年轻了,学习!
原文:https://www.cnblogs.com/tyt666/p/11440083.html