Leetcode刷题日记(五)
刷题的第五周了,这周开始刷Medium的题,每天2-3题吧
目前进度:
68/100
1.2020/04/13
a).题目:
数学思维题,通过两数相加完成数值交换
A=A+B
B=A-B
A=A-B
答案:
b).题目:
新建一个矩阵,并全部填充为-1。
1,2,3
4,5,6
7,8,9
当翻转第一行时,新数组变成了
-1,-1,1
-1,-1,2
-1,-1,3
matrix[0][0]变成了matrix[0][2]
matrix[0][1]变成了matrix[1][2]
matrix[0][2]变成了matrix[2][2]
所以旋转的index为matrix[col][len(matrix)-row-1]
最后不能直接newMatrix=matrix,而是需要将newMatrix的每个值重新赋值给matrix
答案:
c).题目:
先建立一个含有空list的list,之后遍历nums,每次加入新的元素,并找到和他有关的所有子集。
例:nums=[1,2,3]
round: 0
[[1]]
round: 1
[[2]][[2], [2, 1]]
round: 2
[[3]][[3], [3, 1]]
[[3], [3, 1], [3, 2]]
[[3], [3, 1], [3, 2], [3, 2, 1]]
答案:
刷题进度:
71/100
2.2020/04/14
a),题目:
将原数组进行随机排列,之后检查result里有没有随机排列后的数组,如果没有,加入result。
答案:
b).题目:
Stack题
stack包含:stack数组,stack的长度,stack的最大长度
判断stack的长度是否大于k,如果大于k,stack里的值全部加上val。如果不大于stack,更改stack里前k个值。
答案:
c).题目:
动态规划题
up为nums的最长上升list
down为nums的最长下降序列
当数组为上升趋势时,更新up[i]=max(up[i],down[j]+1)
当数组为下降趋势时,更新down[i]=max(up[j]+1,down[i])
最后,因为up和down的递增性,up[i]一定比down[i-1]大
同理,down[i]一定比up[i-1]大
所以返回max(up[len(nums)-1],down[len(nums)-1])+1
答案:
目前进度:
74/100
3.2020/04/15
a).题目:
collections.Counter()函数保留了S和T的每个字母的顺序
使用counterS+counterT-counterS使返回的为按顺序排序后的list,之后把list放入result。
答案:
b).题目:
找到word1和word2在list中的所有index,之后每个word1的index和word2的index相减,最小的就是两个词的最短距离。
答案:
c).题目:
解法1:通过collections.Counter()查看出现次数,返回出现次数等于1的数字
解法2:使用set移除nums中所有复数出现的数字,对原list进行删除。如果删除一次后,原list中不存在删除的值,则返回删除的数字
解法1答案:
解法2答案:
目前进度:
77/100
4.2020/04/17
a)题目:
如果root=None则找不到目标节点
如果root=q或q,则root的左子树或者右子树中含有目标节点,则返回root
如果左子树和右子树各有p或q中的一个,则返回root
如果两子树中含有p或q的一个,则返回该节点。
答案:
b).题目:
将时间转化为分钟数,并存入list中从大到小进行排序。
找到list中两两相减的最小值。
如果list[0]比list[1]大,则返回sub
否则返回list[0]+1440-list[1]
答案:
c).题目:
当A=0或B=0时,返回0。
当A=1且B>1时,返回B。
当B=1且A>1时,返回A,
否则,直到B=1时,A=A+result,result=A
答案:
目前进度:
80/100
5.2020/04/17
a).题目:
新建一个list,把链表里的所有值放入list中。
当list长度为偶数时,直接两两交换。
当list长度为奇数时,除最后一个元素外,两两进行交换。
list顺序颠倒后(头插法),将list中所有元素放入链表l1中并返回。
答案:
b).题目:
使用set去除所有duplicate元素,并使用dict将所有元素和出现次数对应。
删除nums的元素,直到nums的长度等于0时,并更新numsDict中对应元素的出现次数。
遍历numsDict,返回出现2次的数。
时间复杂度: O(3n)=O(n)
答案:
c).题目:
使用collections.Counter()函数获得每个字母的出现次数。
新建charList和freqList存储字母和每个字母出现的频率。
对频率进行从大到小排序,并根据频率大小,对charList进行排序。
将charList的元素*对应频率赋值给result并返回。
答案:
目前进度:
83/100
6.2020/04/18
a).题目:
查看word[i]和word[j]是否有相同字母。
如果没有,将len(word[i] * len(word[j])存入result数组。
如果result数组的长度为0,则返回0。否则返回result数组的最大值。
答案:
b).题目:
新建一个空的dict,将strs的每个字母排序所谓dict的索引,将原来的值作为索引的值。
返回所有索引的值
学了下collections.defaultdict(),下附截图
答案:
c).题目:
使用count记录链表的index
将链表中index为奇数的元素存入oddList,index为偶数的存入evenList。
将oddList和evenList合并为tempList=evenList+oddList
新建一个链表,将tempList中所有元素使用头插法(需要reverse tempList)存入链表,并返回新建链表
答案:
目前进度:
86/100
7.2020/04/18
a).题目:
先使用spilt()函数分割字符,得到listA和listB两个数组。
找出listA和listB两个数组的不同部分,并存入result。
删除result中listA和listB重复出现的元素。
答案:
b).题目:
将链表l1和l2的值存入string。
将string变为int并相加,之后再次转换为string。
新建一个list,存储string的所有元素。
新建一个空的链表,将list翻转(头插法)后加入新链表并返回。
答案:
c).题目:
将head里所有值存入list。
新建2个list,一个用来存比headList中比target小的值,一个用来存headList中比target大或等于的值。
合并2个list,并颠倒该list(头插法)。
新建一个链表,将list中所有值加入新建链表并返回。