重新开始刷题的我
按照Hot 100,Top 面试,算法精选这三类,重新开始刷LeetCode题目并记录下来!以前没有记录下来的东西都不知道该怎么复习。
LeetCode No.1
Category | Difficulty | Likes | Dislikes |
---|---|---|---|
algorithms | Easy (52.42%) | 14194 | - |
给定一个整数数组nums和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 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]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
Solution
Solution 1
Idea:
取每个元素,找对应的差元素,有就输出位置,没有就把取出的元素放回末尾
class Solution:
def twoSum(self, nums: list[int], target: int) -> list[int]:
count = 0 # 第一个元素的位置
for i in nums:
if count > len(nums):
break
count += 1
j = target - nums.pop(0)
if j in nums:
return [count-1, nums.index(j)+count]
else:
nums.append(i)
Submission:
Accepted
- 57/57 cases passed (900 ms)
- Your runtime beats 37.72 % of python3 submissions
- Your memory usage beats 90.67 % of python3 submissions (15.4 MB)
Solution 2
Idea:
建立哈希表,加快寻数的速度,在Python3中字典是哈希表
class Solution:
def twoSum(self, nums: list[int], target: int) -> list[int]:
hashtable = dict()
for index, value in enumerate(nums):
if target - value in hashtable:
return [hashtable[target-value], index]
hashtable[value] = index # 键值反存
return []
Submission:
Accepted
- 57/57 cases passed (36 ms)
- Your runtime beats 87.84 % of python3 submissions
- Your memory usage beats 5.02 % of python3 submissions (16.9 MB)
推测这次耗费内存是建立了哈希表