LeetCode学习笔记- 如何开始使用LeetCode刷题- 刷LeetCode初体验- LeetCode 第一题- Two Sum 解法
IPFS
Github连结
1. LeetCode 网站如何开始刷题?
Step 1: 打开LeetCode网站,并登入
Step 2: 点击Problems
Step 3: 塞选题目,并挑选出自己想要的分类题目
Step 4: 挑选好题目,点进去,就可以开始刷题了喔(以Two Sum为例)
2. Two Sum 实作
题目:
Given an array of integers nums
and an integer target
, return indices of the two numbers such that they add up to target
.
You may assume that each input would have *exactly* one solution , and you may not use the same element twice.
You can return the answer in any order.
给一个整数的nums数组和一个目标整数,程式将传回数组中两个数字的索引,也就是这两个数字相加会等于目标整数
您可以假设每个输入都只有一个解决方法,而且不会重复使用同一个元素,可以按任何顺序传回答案
解法一: 暴力解法
说明:先从list中取一个固定的元素,然后开始从它的下一个元素开始一一配对,看是否相加等于目标值,如果没有,就换下一个元素,以此类推
def two_sum(nums, target): for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: return i, j nums = [1, 2, 3, 4, 5, 6] target = 10 two_sum(nums, target)
执行结果
(3, 5)
提醒: 暴力解法,虽然说很好理解,但对于程式执行效能而言,是非常不好的选择喔,除非不得以,不然希望大家能少用暴力解法
解法二: Hash Table 方法- 杂凑法
说明:建立一个字典来装载值跟索引,值放在key,索引放在value,当程式开始执行的时候,因为前面hash_table还没有添加任何数据,所以一定为空,然后nums前面的数据慢慢填入后,到了后面的元素,hash_table里面也拥有了很多数据了,就有可能会与前面的元素相加等于目标值,此时就可以传回
方法一
class Solution: def two_sum(self, nums, target): hash_table = {} for i, num in enumerate(nums): t = target - num if t in hash_table: return [hash_table[t], i] ## 在hash table中增加数据(key: 值, value: 索引) hash_table[num] = i ## 当没找到任何答案时回传[-1, -1] return [-1, -1] # print(hash_table) nums = [1, 2, 3, 4, 5, 6] target = 10 Solution().two_sum(nums, target)
执行结果
[3, 5]
方法二
class Solution: def two_sum(self, nums, target): hash_map = {} for i in range(len(nums)): if target - nums[i] in hash_map: return hash_map.get(target - nums[i]), i hash_map[nums[i]] = i nums = [1, 2, 3, 4, 5, 6] target = 10 Solution().two_sum(nums, target)
我放在LeetCode上测了一下执行时间,方法一会稍微快一点喔!!
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
- 来自作者
- 相关推荐