参加本次打卡活动主要有两个目标,首先是复习算法,督促自己刷题。其次是学习python。以前都是c++做题,平时很少写python。之前学过一点点语法,由于缺乏运用,基本上忘光了,正好趁这次打卡活动学一下python吧。算法复杂度分析的部分在做题的过程中去进行。重新翻了翻《python基础教程(第3版)》快速的复习了一下python最最基础的一些语法,开始刷题。
在leetcode上面选择了python3,看到defgetConcatenation(self, nums: List[int]) -> List[int]:
这样的语法有点懵。这是js进化成TS的节奏啊?查了一下是python3的新特性:”类型注释“。仅仅是个注释,对类型检查毫无用处,吓了一跳……
体会:一边看书学语法,一边刷题效率还是有点慢。应该抽出整块时间,数小时完整的过一过python语法再继续刷题吧~
作业打卡:
经典的空间换时间思想。利用hash查询时间复杂度近似O(1)的特点,优化O(n)数组查询操作。额外需要O(n)空间复杂度来存dict。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dic = {}
for i, num in enumerate(nums):
if target - num in dic:
return [dic[target - num], i]
else:
dic[num] = i
return []
太简单了,没什么好说的……一道语法题,帮助熟悉不同编程语言的数组声明、赋值操作。
学习了python中list的extend的用法。
a.extend()方法将原list后面附加多个值,并返回修改后的a。
使用+号也可以链接两个list,但是a+b并不会改变原先的list a,而是返回一个全新的list。而且会把ab各复制一份,效率比extend低。
class Solution:
def getConcatenation(self, nums: List[int]) -> List[int]:
nums.extend(nums)
return nums
暴力双重循环时间复杂度O(nm),用hash优化O(n+m),看了题解,完全不知道set怎么用,先学一下python再来看看吧。
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
dic = {}
for c in jewels:
dic[c] = 0
for c in stones:
if c in dic:
dic[c] += 1
return sum(dic.values())