Leetcode刷题日记(五)

2020-04-14  本文已影响0人  小璇voice

刷题的第五周了,这周开始刷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中所有值加入新建链表并返回。

答案:


目前进度 :

89/100

第五周刷题任务完成,撒花。

上一篇下一篇

猜你喜欢

热点阅读