Leetcode Top 100 Liked Questions(序号75~104)

   日期:2024-12-26    作者:wrpe2 移动:http://oml01z.riyuangf.com/mobile/quote/50436.html

 题意:红白蓝的颜色排序,使得相同的颜色放在一起,不要用排序

哈希

 
 

Dutch National Flag Problem荷兰国旗问题

感觉和我之前做的差不多

 
 

如果nums[mid]是0,low和mid交换,因为low负责0的部分,low++保证指针前面的都是0low指针指到的就只有0或者1;如果nums[mid]是1,那么是正确的;如果nums[mid]是2,high指向的和mid指向的交换,high--来确保high的右边都是2,为什么mid不++?因为mid这时可能是0,所以需要循环一次在判断

 
 
 

题意:给出两个字符串s和t,找到minimum window substring

不会

用滑动窗口,窗口的开头在s字符串的初始位置,结尾在所有t的字符都在里面;当上面的窗口有了,就可以改变头指针来缩小窗口,步骤为

1. 如果s比t小,那么直接返回;2. 记录t中的字母数量

3. 初始化;4. 尾指针遍历s

5. 一边遍历的时候一遍计算t中的字母数量;6. 如果数量剪完了,说明窗口形成了,现在要通过移动头指针实现窗口缩小了

7. 记录下最小的窗口长度和起始位置;8. 返回答案

注意:如何在头指针移动中判断当前节点是或否是t中的?在每个end指针移动的时候会把mp中的字母--,这时候就只有在t中的字母是大于等于0的了

 
 
 

题意:给出一个数字集,输出所有的子集(包括空集

用递归?就像之前一样;有想过要不要用循环,但是发现用循环的话答案不对,就把循环消去了

 
 
 

题意

把所有可能性的都遍历一遍,如果是BFS的话,先把起点找到,之后环顾四周看看有没有

首先要准备一个队列,把(位置,第几个英文字母)找到的都放到队列里,之后bfs上下左右的看,如果在周围找不到下一个就return false,但是做到最后 超时了TLE

 
 

首先得到n和m,遍历地图,如果地图是第一个字符,那么就可以开始递归了

在递归条件中先判断是不是这个字母,然后递归下去

 

优化途径

1. 不要把递归放在判断if里面,这样会费时

2. 先把字符串倒过来,如果最后一个字符的数量大于第一个字符的数量,再把字符串倒转回去也就是先把字符数量少的先递归【但是我不知道为什么】

 
 
 
 

如果是双指针的话,min(a[i],…,a[j])*(j-i+1

那就首先是On^2的时间复杂度,但是预处理的话二维数组会爆栈

不会做

st里面从小到大的放置,相等的留下,ran是最近的比当前的要大的高度,height的数组最后加上0。求面积是弹出的最大值*(当前的位置减去栈中目前的位置-1

为什么是当前的位置减去栈中目前的位置-1

因为设这一轮被弹出的位置为x,高位h[x]弹出后的栈顶位置为y,因为h[y]小于等于h[x],也就是说(y,x]的位置之间的高都是大于h[x]

【不然为什么(y,x]的位置之间的高要被弹出去呢】

同时(x,i)的位置之间的高也都是大于h[x]

【不然x就被弹出去了】

所以(y,i)之间x是最小的;因此面积是h[ x ] * ( i - y - 1 )

注意:初始化ran,初始化h数组

为什么栈一开始不把-1放入?【就像32. Trapping Rain WaterLeetCode Top100 Liked 题单(序号19~33)】

因为32是栈,而这个是单调栈,需要比较站内的元素来决定是否弹出

相关:42. Trapping Rain WaterLeetCode Top100 Liked 

 
 

感觉和单调栈的原理差不多,但是没有看懂

 
 
 

题意:输出二叉树中序排序

就直接中序递归就可以了

注意:当root为空的时候要特判

 
 
 

题意:判断树是不是平衡搜索树BST,左子树比中间的小,右子树比中间的大

还是递归,就像前面的79 word search一样搜索,然后判断ans的顺序大小

注意:等于也不行

注意:int&的时候不要传const int 进去

 
 

确实更加简洁快速

 
 
 

题意:看是不是对称的

中序序列ans,两个指针从两端向中间核对

答案不正确,因为[1,2,2,2,null,2]也会判断成正确的,所以不可以

既然是递归,那就要让左子树的左子树 和 右子树的右子树对称;左子树的右子树 和 右子树的左子树对称

但是不会写

递归函数的参数是左子树指针和右子树指针,然后判断左的值和右的值是否相同

然后判断左的左和右的右  左的右和右的左

这样递归下去

 
 

题意:层序遍历

一层的结尾放一个空指针,每次循环到空指针的时候,就在结尾放一个空指针;当循环弹出空指针同时队列为空的时候,就停止放入空指针

 
 

用一层的队列大小得出一层有多少个,来循环

 
 
 

题意:求树的最大深度

用层序遍历看看有几层或者用递归无线向下,那就先用层序遍历向下

 
 

树的高度=max(左子树的高度,右子树的高度+1


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号