在dictionary里找有没有
对好位置加,注意最后一个进位
用两个指针,记录前后位置,用字典存现在已经有的字符,重了就删,更新结果
把问题转换成找两个数组的第几个数,找的时候二分删一个数组的一半
选一个位置为中点向两边拓展,可以跳掉连续重复的字符
用字典存每个字符应该出现在第几行,然后顺着输出
先判断正负,然后取mod加到list里输出,主要和2**32比
先判断正负,不是0-9的break,用ord转成数
转成字符串,到n/2长度头尾比
头尾两个指针扫,两个的距离乘矮的是当前能装的最多的,下一次矮的往里移 ### 12. Integer to Roman |python| 先对应好,从大到小,然后用公式
先对应好,从左到右,小的减,大的加
先两个找,找好了跟第三个比
先排序,确定一个,然后两个指针扫
16. 3Sum Closest |python|
先排序,确定一个,然后两个指针扫,再维护一个dif存最小的差
对应好之后BFS
先排序,确定两个,两个指针扫后两个
两个指针先让一个走n个,然后一起走,第一个到结尾第二个就是第倒数第n个
用栈,左括号进,又括号弹,然后看对称不对称
用优先队列,key就是每个链表的第一个元素,pop完,删一个再放回去
用队列存当前状态第几个左括号和第几个右括号,bfs
所有链表的头存在优先队列里,每次合并pop出来一个,并更新这个头位它的next
三个指针,第一个第二个换,第三个迭代
两个指针lr找范围,找满k个或者列表结束换,如果不满返回结果
两个指针,前一个指向不重复的,如果有新的不重复的就拷贝的前面
头尾两个指针,如果要删就换
暴力求,或者kmp
减除数,结果和除数<<1,直到被除数小,注意0,无穷和正负的处理
找到第一个第一个比右边小的,先交换然后后面排序,注意最大的直接排序
用栈存左括号位置,遇到右括号pop,存额外右括号的位置,最后遍历一遍栈,找相邻元素距离最大的位结果
二分,找有序的一边
二分查找开始和结束位置
二分
36. Valid Sudoku |python|
直接按要求检查
先存所有空格位置,暴力递归
按照规定读自己
BFS
BFS且记录位置
删掉0和大于n的,建图。。
正反扫两边,记录最左最右的最大值,每个位置是左边最高右边最高中小的减去高度
对每两位的乘积存到对应位置上,再做一遍进位
dp,根据每一位进行状态转移
贪心,记录当前可以调到的最远的距离,当当前点已经是最远的时候,开始跳下一次
46. Permutations |python|
BFS DFS
初始为空,每次插入一个数,如果要查的数和这个位置的数相同则break来去重
48. Rotate Image |python|
对应的四个点转,注意奇数时中间那列
对每个字符串排序
算开方的,递归
DFS,用一维数组存位置就够了
52. N-Queens II |python|
DFS,同上
求部分和,顺着找到目前位置最大的和最小的,差是结果,min-1
盲人探路
如果能跳到n一定能到n-1倒着跳
按开始从小到大排序,如果有重合则更新当前区间结束点,否则在结果中增加当前区间
57. Insert Interval
把新的加到一起排序,然后顺序合并
split之后返回最后一个长度
盲人探路
先求出来阶乘,然后挨个除,把对应的加进去
61. Rotate List |python|
找到尾以及链表长度,找到要转的位置,尾指向头成环,新的头为尾的下一个,尾下一个为空,切断环
62. Unique Paths |python|
dp,第一行1,每个格等于上面加左边
dp,先初始化第一行第一列,只要出现1后面都是0,中间的个如果是1是0,不然是左、上的和
dp,初始化第一行,每个上面等于或左边最小的加自己
65. Valid Number |python|
慢慢写正则
先翻转顺着加一,再翻转
67. Add Binary |python|
先补齐,对位加,注意最后的进位
好麻烦,各种情况想清楚
二分
70. Climbing Stairs |cpp|
dp,递推
栈,..弹栈,注意弹之前先判断size
dp,两个字符相等,直接等于前一个,否则是(前一个,删第一个,删第二个)中最小的+1
每行的第一个做标记,然后再弄两个记第一行,最后都扫一遍
相当于变成一维二分
75. Sort Colors |python|
三个指针,0和2换,0前面加一,2后面减一
先统计,然后两个指针扫
77. Combinations |python|
dfs记录位置和个数
bfs
79. Word Search |python|
dfs回朔
和I类似,如果比当前前两个数大,就拷贝过来
。。。on比log的快
dummy头指针,当前指针走到重复的最后一个,如果前一个指针的下个为当前指针则证明没重复,否则更新前一个指针跳掉当前指针
等于next就删
用栈存当前高度,如果比下一个高就pop,并算新的面积
遍历一遍分成两个链表,最后再合并起来
拿每个位置当根节点,递归
一个数组一个指针,都从尾部开始,再一个指针放最后面,每次比大的放最后,最后把剩下的加进去
弄了0和1,剩下的就reverse再在前面加
90. Subsets II |python|
相当于1,然后去重。。。正常应该是记录位置
91. Decode Ways |python|
dp注意整10 的情况,以及多个0
用到四个指针dummy,pre,start,then,先找到开始换的节点,把每个换到pre的下一个
记录位置dfs
dfs左根右
枚举位置为根节点,递归求所有左右子树,再组合起来
dp,每多一个数,结果为前面所有分着乘
递归检查左右子树,要传最大最小界
中序遍历,找到两个顺序反的结点,交换
递归左右子树
101. Symmetric Tree |python|
递归比左右子树,注意none
根为0,用字典存每层有哪个节点
中序遍历树,字典存节点的层,根据奇偶正反序输出
dfs左右子树
不能传数组,算下标
同上
和1一样,就输出的时候反着
中间的当根,两边递归
快慢指针找中点,中点为根,递归左右子树
递归,左右高度相等或者差1,且左右子树平衡
bfs,找到叶节点结束
bfs,搜到所有叶节点
113. Path Sum II |python|
bfs时要记录路径
pre记录下一行的开始,用next指针遍历一行
把上一行投影下来补0,从左到右等于自己加右边的
一样,就返回一行
dp倒着向上走,每次选小的加
贪心扫一遍
贪心,相当于每天都能买卖,只要赚就卖
dp,找到两次买卖的时间
左边最大,右边最大,和经过root+左边最大+右边最大,注意全负数的情况,返回只返回从自己出发最大的以及和0比
125. Valid Palindrome |python|
正则把没用的删了,再判断
127. Word Ladder |python|
神奇的建图方法,剩下就bfs
并查集
dfs,传当前的值
130. Surrounded Regions
先把边界所有为o的加入队列,遍历一遍换成s,最后再把s换成o其他换成x ###131. Palindrome Partitioning dfs,存路径
133. Clone Graph |python|
存一个visit,dfs
134. Gas Station |python|
如果总和大于cost一定有结果,从头模拟如果不行就从不行的节点当头
贪心,先正着给,再反着给
136. Single Number |python|
xor一遍
137. Single Number II
set求和乘3减num求和,再除2
用defaultdict存node
139. Word Break |python|
db拆不拆
133. Clone Graph |python|
用字典存分割的结果,dfs
一个slow一个fast,有环一定能重合
142. Linked List Cycle II
方法和1相同
根左右
左右根
字典存值,list存位置,每次写的时候都放到最后,满了删最前
148. Sort List
用栈,注意6/-132 = 0, python = -1
先split,reverse,再join回去
先用0分开数组,对每个部分分别求,取最多偶数个负数的subarray
二分找最小的
直接min最快。。。
用list模拟
左子树位右子树,父节点位右孩子,
每次读,直到不够4个位置,为什么py不对
差不多py不行
两个指针记录两个字符最前面的位置
从两个指针的头开始,如果走到尾则换到另一个链表,直到两个指针相同,为交点
相等是不是差一个字母,不相等长度差1,差一个字母
扫一遍大于左右
163. Missing Ranges |python|
相等跳过,差一加一,否则输出,注意单个的
split之后直接比
存每次除的余数,出现重复的时候结束结束循环,这个重复的余数为循环节开始的地方
确定一个二分第二个
mod26
169. Majority Element |python|
count > n/2
用字典存,查的时候on
反过来
删了。。。
中序遍历放到数组里
179. Largest Number |python|
贪心,写一个比较函数
如果是空格翻转,最后一起再翻转
把出现过的存在一个集合里,如果再次出现就加到结果里
189. Rotate Array |python|
切片
190. Reverse Bits |python|
转二进制,zfill,翻转,再转回去
191. Number of 1 Bits |cpp|
转二进制数
198. House Robber |python|
dp每个房间偷不偷
中序遍历,加一个level
dfs/bfs/并查集
202. Happy Number |python|
死循环到1或者重复
dummy,等于就跳
204. Count Primes |python|
筛法,或者后面好多hint
用dict,换线换一次看看是不是都行
每次tail向后一个
207. Course Schedule |python|
拓扑排序
字典树
拓扑排序
212. Word Search II
trie+dfs
213. House Robber II |python|
环可以变成两次dp,偷不偷最后一个
每次找一个,大于小于的分治,注意shuffle
bfs,放位置和剩余的
用set,一个新数in set就true
字典存每个数都出现在哪,每个数判断一下距离
223. Rectangle Area |python|
求交集然后减
224. Basic Calculator |python|
后缀表达式,栈空进栈,优先级高进展,否则弹出到比自己低的,自己再进栈
数组模拟
先转子树,再交换孩子节点
比1简单 没括号
228. Summary Ranges |python|
先加个-1,两个指针,有空了输出
count。。
中序遍历
231. Power of Two |cpp|
除log之后是不是整数
数组模拟
考虑1出现在哪位,公式
快慢指针先走到中点,然后翻转一半比
先看会不会是根,不是往子树里找
如果根是其中一个子树或者空则返回,否则递归两个子树找lca,如果两边都不是空则为当前点,否则为非空子树的结果
遍历,等于就删
先正着扫,乘左边的,再反着扫乘右边的
双向队列,删除超出的,且保持第一个永远最大
右上角开始,向左下找
遍历字符串如果是运算符则拆成两边递归,将两边的结果组合,如果不包含运算符则返回数字
242. Valid Anagram |cpp|
先排序,看看等不等
两个指针扫两个单词,每次更新结果,开始给-1
用字典存每个单词的位置,然后遍历
和一一样,注意只有两个指针不等才更新
找好对应的,扫一半+1
递归,奇数是向n-2的中间插一位的,偶数是向n-2的中间插两位的
用两个字母的差当key,然后分组
遍历的时候返回三个值,真:左边个数加右边个数+1,假:左右最大,以及自己的值
for一遍,虽然肯定要求不是这样的
252. Meeting Rooms |python|
排序完比
253. Meeting Rooms II |python|
排序完用优先队列,新的进来如果比最小的有冲突就都加进去,max qsize是结果
dfs,存结果,当前的,和从几开始
256. Paint House |python|
dp,rgb三个变量,每次取和自己不一样颜色里小的加自己的费用
遍历的时候返回path
258. Add Digits |cpp|
mod 9的余数
259. 3Sum Smaller |python|
排序,确定一个扫另外两个
xor之后找最后一个1,然后分成两组xor,两组的结果就是
261. Graph Valid Tree |python|
是不是n-1边,判断是不是连通的
263. Ugly Number |python|
不停除235之后看是不是1
统计一遍个数,是不是只有最多一个奇数
268. Missing Number |python|
求和减一下
269. Alien Dictionary |python|
拓扑排序
遍历时候和全局结果比
放每个字符串的长度,用#分开
中序遍历,然后两边往里加
1到19先写好,写一个转1k以下的,然后多少b多少m多少k
记录每个citation有几篇文件,然后倒着扫
275. H-Index II
二分
276. Paint Fence |python|
dp,same和dif两个变量
因为就一个找到可能的那个人,在判断一遍是不是符合条件
二分调api
279. Perfect Squares |python|
how to prove 4^k(8m+7)????
280. Wiggle Sort |cpp|
on找中位数算法,k largerst ,cpp好省事
281. Zigzag Iterator |python|
先遍历了
dfs,注意处理00开头的情况
283. Move Zeroes |cpp|
找到0删了,最后再加,或者直接换到后面
284. Peeking Iterator |python|
记录peek num
先中序遍历
286. Walls and Gates |python|
从门开始bfs
slow fast建图
建好判断是不是unique的
289. Game of Life |python|
模拟
290. Word Pattern |python|
对应pattern和单词,判断是不是冲突
291. Word Pattern II
用字典存模式,dfs回朔
mod4
顺着扫一遍所有可能的
294. Flip Game II |python|
借助前一个,用递归看看第一步是不是有一个能赢,
两个优先队列,记录大数和小数,每加一个新数根据当前长度向其中一个放
296. Best Meeting Point |cpp|
每一个维度的中间点,还用找中位数算法 ###297. Serialize and Deserialize Binary Tree |python| 前序遍历,#为None,空格分开
遍历的时候向下传当前的长度,每次先更新结果
299. Bulls and Cows |python|
模拟
最长递升子序列,log的dp
bfs
遍历每个点更新四个角,最后求面积
部分和
二维部分和
并查集
树状数组
二维树状数组或者用部分和也能过
dp,存前两天买或者卖的状态
做两次bfs,根在第一次bfs最深的那个店
312. Burst Balloons |python|
dp,取一个扎,为乘积+左右两侧的
bfs,根为0,左减又加,输出key最小到最大
26位mask,二维for一遍 然后and是0就算,注意加一个0,没有符合条件的情况
319. Bulb Switcher |python|
sqrt
dfs,记录位置
枚举每个里面取的个数,得到能取到的最大的,再merge
因为按字典序,图存到优先队列里,然后dfs
322. Coin Change
bfs
326. Power of Three |cpp|
和2一样
奇偶两个dummy,扫完了连起来
first second两个,小更新,找到第三个
330. Patching Array |python|
找出现miss的数,如果有比他小的,就加这个数,否则乘2
存最小的两个,如果有新的比这两个大,则为真
335. Self Crossing
考虑每连续六个,两种情况可能相交
337. House Robber III |python|
如果抢,就dp下两层的,不抢就一层的,用负数表是是不是求过
338. Counting Bits |python|
2的n次方拓展
求深度的的和函数互相调
用栈存list和深度
342. Power of Four |cpp|
log
343. Integer Break |python|
拆3
344. Reverse String |python|
直接reverse
两个指针前后找元音,然后交换
每次重算了。。
字典然后排序
模拟
取set求交
用字典统计个数,取小的
写好每个数能去哪个数 然后dfs
用heapq,add的时候加入一个长度为一的区间,get的时候合并区间
353. Design Snake Game
使用deque存蛇和食物` ###354. Russian Doll Envelopes |python| 按x[0],-x[x]排序,二分
355. Design Twitter |python|
各种字典
356. Line Reflection |python|
去重,排序,找到中点,用一半对应另一半
0,10,81是两位的,最后一个乘t-1是下一个的
用字典存时间
判断二次项正负,两个指针,找绝对值大的加
用字典存序列
dfs
互质就可以
dfs记录层数
二分
dp,只用判断最大的能不能整除
找到一个不是9的加,后面变0,全是9直接变0
370. Range Addition |python|
左端点加,右断点减,最后统计
位运算,mask,b的每一位给a
先把0到9次方求了,然后每位算
优先队列存组合,找的时候j+1,到头再i+1
二分猜
贪心扫
dfs
优先队列
用字典
把数存到数组里,用字典存对应文字,在删除的时候,把最后一个数组最后一个元素移到该位置
xx sampling随机算法
383. Ransom Note |python|
字典统计一次
384. Shuffle an Array |cpp|
随机交换两个数
存当前的数,根据情况对当前的数 乘10,+1,/10+1
用字典扫一遍
用字典存层数,如果是包含点则是文件,更新当前长度,否决存下一层
两个字典比一下
390. Elimination Game |python|
每次找头在哪里
存四个最外围的点,然后比总面积是不是为四个点包围的面积
392. Is Subsequence |python|
两个指针扫,相等下一个,不等找到相等的位置,如果不全 false
393. UTF-8 Validation |python|
分类判断
394. Decode String |python|
用栈存,设多个状态
396. Rotate Function |python|
推和上一项的关系
往四的倍数走,注意最后3直接减除
xx采样
能除的建图 bfs
找到对应的数,在找到位置,对应的数每次减去 l(每次加一)乘count(每次乘10)
401. Binary Watch |python|
确定小时 遍历分钟
402. Remove K Digits |python|
贪心,注意0
403. Frog Jump
dfs,注意不能跳0步
dfs
负数+2的32次方
先按-x[0],x[1]排序,在p[1]插入p
判断是不是
统计多少个是偶数次
二分答案
去掉长度不一样的,然后利用前面的生成,然后从最短的开始找
先mod15在mod5和3
确定两个扫
冒泡三次
415. Add Strings |python|
按位加
dp,能不能凑成一半,对每个数要或者不要
两边bfs,求交集
一个x上面或者左边是点
从最高位32位开始,每次结果左移一位,看对应位是1的,如果这些数有一个和1和当前结果xor是1,结果加1
两层for判断
找到每个数唯一的字母
用字典存每个字母出现的次数,对每个字符找到最左边的
425. Word Squares |python|
trie,dfs
如果是空格状态为0字母为1,0的时候状态为1,结果+1
按开始排序,扫一遍和前面比
436. Find Right Interval
先排序,然后二分搜索
437. Path Sum III |python|
dfs是不是从自己开始
用一个字典存,遇到没用的字符跳
从后面开始,用栈
441. Arranging Coins |python|
等差数列 [(sqrt(8n+1)-1)/2]
用数组自己作为hash存哪个数之前出现过,第一次出现的数将对应位置变成负的
建图,拓扑排序
先存到数组里加
枚举中间的点,算距其他所有点的距离存到字典里,距离相同的点组成结果
用数组的index做hash,出现过则变成负数
序列化用前序遍历空格分开,恢复时用deque,递归建树
450. Delete Node in a BST
如果比根大,向左找,否则向右,当找到时如果只要一个子树就返回,否则将根换成右子树的最小值,并删除该点
存到字典里按顺序输出
按横坐标排序,初始左右为正负无穷,对于不在范围里的气球,更新左右结果+1
数学,sum(num)-l乘min(num)
把两个数组合并成一个,转换成2sum
455. Assign Cookies |python|
从小到大排序,从小的开始,如果能满足就给,不能就跳
456. 132 Pattern |cpp|
三个指针扫
枚举pattern的长度,如果能整除就判断是不是
461. Hamming Distance |python|
异或数1
找到中位数,和所有别的数求差
463. Island Perimeter |python|
遍历地图,每个方块+4,有相邻的-1
468. Validate IP Address
正则表达式
dfs
474. Ones and Zeroes |python|
dp,遍历每个数,数0和1,data(i,j)=max(data(i,j),data(i-#0,j-#1)+1)
对heater排序,再对house排序,遍历所有house看能否被覆盖到
找到第一个2的n次方大于n,用这个数-1与n异或
遍历32个位,每个数与对应位&,为该位为1的个数,也能得到0的数个数,相乘加到结果
确定上下界,遍历可能的结果判断
481. Magical String |python|
从短的序列开始拓展到n
先去掉-,然后按位加-
遍历一遍计数,遇到0清零
dp存差dp(j,j+1)=max(num(j+1)-dp(j,j+i-1),num(j)-dp(j+1,j+i))
用itertool生成所有组合并判断
对面积开方,从中间向两边扫
494. Target Sum
dp,结果存在dp(i, sum+1000),dp(i,j)=dp(i+1,j+num[i])+dp(i+1,j-num[i])
495. Teemo Attacking |python|
结果加 min(相邻两次攻击时间差,持续时间的)
用字典存对应结果,求的时候递归向后找
按 i+j,(j,i)[i^j&1](奇偶),val排序
500. Keyboard Row|python|
先把键盘的行数存到字典里,挨个单词判断
遍历树,把值存到字典里
502. IPO
两个优先队列,一个captial从小到大,一个profit从大到小,贪心每次选取profit最大的,然后更新两个优先队列 ###503. Next Greater Element II |python| 用栈存,初始为倒序,从后开始遍历,如果栈顶小于当前的数pop直到没,当前的结果位栈顶对应的数 ###504. Base 7 |python| mod7 取余 ###506. Relative Ranks |python| 写好顺序GSB...,用把num排序再zip成字典,到num里取 ###507. Perfect Number |python|
###508. Most Frequent Subtree Sum |python| 后序遍历,值存到字典里,最后找字典里最多的 ###513. Find Bottom Left Tree Value |python| 前序遍历,遍历时记录层数 ###515. Find Largest Value in Each Tree Row |python| 遍历的时候把数存到对应列的字典里 ###516. Longest Palindromic Subsequence |python| dp, 记录ij 头尾,dp(i,j) = dp(i+1,j-1) if s[i]==s[j] else max(dp(i+1,j), dp(i, j-1)) ###517. Super Washing Machines|python| 求平均,把数组变成demand,然后从第一个开始向后转移,需要转移最多的为结果
518. Coin Change 2
###520. Detect Capital |python| isupper, islower, istitle ###521. Longest Uncommon Subsequence I |python| 相等为-1,不等为长者 ###524. Longest Word in Dictionary through Deleting |python| 对单词按长度排序,对每个单词用一个指针扫描进行判断 ###525. Contiguous Array |python| 记录01差,字典存差出现的位置 ###526. Beautiful Arrangement |python| dfs,如果符合则对下一个和当前的数进行交换 ###529. Minesweeper |python| bfs,如果是数填数,否则加入队 ###530. Minimum Absolute Difference in BST |python| 前序遍历的结果为从小到大的顺序,记录前一个值,求差 ###531. Lonely Pixel I |python| 开两数组用来存每行每列有多少个,最后再遍历一次,判断这个点对应行列是否为1 ###532. K-diff Pairs in an Array |python| 数存到字典里,遍历字典key看相差k的key是否存在 ###533. Lonely Pixel II |python| 和1类似,遍历的时候存把位置存到一个字典里,最后再遍历字典看行列是否为N ###535. Encode and Decode TinyURL |python| url存到字典里,key为自增的数 ###536. Construct Binary Tree from String |python| 找括号分两边子树,然后递归 ###537. Complex Number Multiplication |python|
###538. Convert BST to Greater Tree |python| 右根左遍历,记录和,加到root ###539. Minimum Time Difference |python| 先排序,再加一个最小时间加24h的时间,顺序减求最小 ###540. Single Element in a Sorted Array |python| 根据奇偶和前后是否相等进行二分 ###541. Reverse String II |python| flag记录是否反正 ###542. 01 Matrix 先从左上到右下扫一遍更新,再右下到左上扫一遍更新 ###543. Diameter of Binary Tree |python| dfs,深度为左右子树最大深度+1,更新结果 ###547. Friend Circles |python| 并查集 ###551. Student Attendance Record I |python| 根据规则记录状态 ###553. Optimal Division |python| 超过两个数结果为第一个数除以后面所有数的连除 ###554. Brick Wall |python| 用字典存对应位置的砖块个数, ###557. Reverse Words in a String III |python| split空格reverse再join ###560. Subarray Sum Equals K |python| 用字典记录部分和,结果加当前和与k的差的个数 ###561. Array Partition I |python| 先排序,隔位取,求和 ###563. Binary Tree Tilt |python| 后序遍历,结果加左右差,返回左右加root ###565. Array Nesting |python| 存一个visit数组初始false,每个数只能被visit一遍,遇到true的更新结果 ###566. Reshape the Matrix |python| 如果可以转,把数组拆成一维迭代器再拼 ###567. Permutation in String 先把s1存在字典里,遍历s2放到另外一个字典里比较 ###572. Subtree of Another Tree |python| 递归和两个子树比,比的时候也递归比 ###575. Distribute Candies |python| min(len(candies) / 2, len(set(candies))) ###576. Out of Boundary Paths 用两个数组迭代,如果出范围就加到结果里 ###581. Shortest Unsorted Continuous Subarray |python| 排序与没排序的比,找到第一个和最后一个不同的 ###582. Kill Process |python| 先建有向图,然后bfs ###583. Delete Operation for Two Strings |python| dp类似与edit distance ###591. Tag Validator 用正则,先替换掉cdata为t,然后替换tag为t,直到不能换为止,如果最后结果为t则是validate的 ###592. Fraction Addition and Subtraction |python| 拆出来所有数,按顺序加起来,最后约分 ###593. Valid Square |python| 两两算距离,四个短的相等,2个长的相等 ###594. Longest Harmonious Subsequence |python| 所有数存到counter里,对于每个数看下个数在不在,如果在更新结果 ###598. Range Addition II |python| 找到操作里最小的x和y,x乘y为结果 ###599. Minimum Index Sum of Two Lists |python| 两个列表存到字典里,值为index,把公共的index和存到字典里,最小的key为结果 ###605. Can Place Flowers |python| 贪心,能放就放 ###606. Construct String from Binary Tree |python| 递归,对左子树,如果左右子树都不存在返回空,对右子树,如果有为空,返回空 ###609. Find Duplicate File in System |python| 先拆开存到字典里,key为内容,value为路径,返回所有长度大于一的value ###611. Valid Triangle Number |python| 先排序,遍历最大边,两个指针找能够构成三角的范围 ###617. Merge Two Binary Trees |python| 递归merge ###621. Task Scheduler |python| 存到counter里,用最长的当分隔,得到最长长度,和总长度比 ###623. Add One Row to Tree |python| 递归加,d<=2时左子树1,右子树0 ###628. Maximum Product of Three Numbers |python| 排序,结果为前三个和后三个拼的最大值 ###630. Course Schedule III |python| 按结束时间排序,用优先队列从大到小,当前start小于end pop并更新start,最后剩下的长度为结果
632. Smallest Range
用优先队列维护每一列的最小值,同时记录左右,当一个列结束返回结果 ###633. Sum of Square Numbers |python| 遍历0到sqrt(n) ###635. Design Log Storage System |python| put就append,取的时候根据gra遍历一遍判断 ###636. Exclusive Time of Functions |python| start压栈,end弹栈 ###637. Average of Levels in Binary Tree |python| 用字典存层,最后再算平均
639. Decode Ways II
###640. Solve the Equation |python| 正则找到所有的系数和常数项,除得结果 ###643. Maximum Average Subarray I |python| 前后两个指针求连续的和,最后再求平均 ###645. Set Mismatch |python| 求和,再找到重复项 ###646. Maximum Length of Pair Chain |python| 按y排序,扫一遍用y更新当前值,初始-inf ###647. Palindromic Substrings |python| 枚举中间点,向两边拓展 ###648. Replace Words |python| 字典存到集合里,对句子中的单词,从短到长匹配 ###649. Dota2 Senate 贪心,每次都ban掉下个对方,用两个队列存双方的位置,当a可以ban掉b的时候,把a+n加到queue中 ###650. 2 Keys Keyboard |python| dp,初始dp[i]=i,之后如果能整除,更新 ###652. Find Duplicate Subtrees |python| 前序遍历,并序列化成字符串,存到字典里,找所有出现过重复的 ###653. Two Sum IV - Input is a BST |python| bfs,遇到的数先检查对应的是否出现过,否则存到集合里 ###654. Maximum Binary Tree |python| 找到数组里的最大值做根,对两边递归 ###655. Print Binary Tree |python| 先求深度,根据深度初始化结果数组,递归填 ###657. Judge Route Circle |python| 只有做完能回到初始位置才可以 ###658. Find K Closest Elements |python| 二分找到中点,两个指针左右拓展 ###659. Split Array into Consecutive Subsequences |python| 字典key为末尾的数,value优先队列所有以该数结尾的长度,如果前一个存在则append最短的 ###660. Remove 9 |python| 换成九进制 ###661. Image Smoother|python| 模拟,找一周的点求平均 ###662. Maximum Width of Binary Tree|python| 用字典记录每层最左边和最右边的位置,对应pos 的两个子树的位置为 2pos 和 2pos+1 ###663. Equal Tree Partition|python| 向一个集合里加入所有树的和,如果二分之一整个树的和在这个集合里则可以分割 ###664. Strange Printer|python| dp,dp(i,j)为i到j的最小值,枚举分割中点,dp(i,j) = min(dp(i+1,j)+1, dp(i,k-1), dp(k+1,j)) ###665. Non-decreasing Array 从前后扫两遍,每次扫只能换一个数 ###666. Path Sum IV 先把树存到数组里,然后dfs遍历 ###667. Beautiful Arrangement II 加入k=4,先15243这样拍,剩下的顺序放 ###668. Kth largest Number in Multiplication Table
dfs, 小于L返回右子树,大于R返回左子树
根是最小的,找比根大最小的
672. Bulb Switcher II
只用考虑m,n<=2的情况,大于是8
n方的最长递增子序列,新建一个数组记录有多少方法
扫一遍,递增+1,否则清0
建立字典时将每个单词拆成长度个项,做为key存在字典里,搜索的时候也拆成长度个去查找,拆是只把每一位换成下划线
677. Map Sum Pairs
Trie数,按路径更新差
lr记录当前最少和最多没匹配的左括号,r不能小于0,最后判断l是否为0
679. 24 Game
680. Valid Palindrome II
先正常检查,如果不匹配就左边+1或者右边-1,继续匹配,但标记是否记录过