算法补天系列之——中级提高班-2(树的递归,动态规划,调整遍历方向减少复杂度)

今天的题:

在这里插入图片描述

这个题目很好办,我们直接用哈希表就可以了。
我们统计处理一下,然后再遍历一次,+2之后去找这个数值有没有就行了。
巨™简单

好了,我们热完身了,下一道题:

在这里插入图片描述

这道题可以说是非常业务的题目了。
这里可以简单说一下,互联网公司的笔试题目可以分两类,业务为主(55%)和技巧为主(45%)

这道题很明显就是只能从大平均的集合那数据去小平均的集合。并且拿的应该是小平均到大平均之间的数据。并且应该是从小往大的去拿,这样可以使得magic的次数尽量多。
需要注意的是,我们的平均值是变的,所以我们要在选择的时候care一下。

再来一个括号字符串的题目吧:

在这里插入图片描述

这个题目,看一下就懂了,超级简单,就是之前那个匹配的变量的最大值。好弱啊是吧。
(这个好像之前说到过,不过看这里没有,我就简单提一下,就是说定义一个变量=0,左括号的话++,右括号的话–,不能为负)

我们来补充一下:

找其中最长的有效括号子串。
这道题目,之前在LeetCode中也有过,当时的每日一题好像还是。
这个题目我当时是用的栈解决的。找到了所有的可以匹配的括号,统计最长的连续可匹配的括号。
不过也可以用dp来解决问题,我们用dp[i]表示以i为结尾符号,看最长的有效长度。
首先我们要看这个字符本身,左括号直接over,做0,然后看i-1位置,我们知道i-1位置往前的合法的括号串的长度,我们在这个括号串之前的那个字符去比较。如果没匹配上,那就over了,没有匹配上的,如果匹配上了,那就至少是i-1那个串+2,。
为什么是至少?
因为在这个字符前面,可能还有一段合法的。我们要记得把这个部分加上去
在这里插入图片描述

并且这样的机制,可以保证不循环遍历。

你们玩思路的心都脏,我们来看一个纯coding的问题(滑稽)

在这里插入图片描述

这个很简单,我们一定要保证辅助栈是从小(栈顶)到大(栈底)的,如果不满足,就弹回到那个栈里面,最后直到辅助栈慢了,应该也就是单调栈了,然后返回给原来的栈,就满足要求了,这个自己画一下应该就懂了,很好理解。

我们再看看这个:

在这里插入图片描述

这个是一个经典的从左往右的尝试模型
在这里插入图片描述

其实相对而言也是比较简单的。
递归其实是比较好想的,要改动态规划的话,因为这个递归参数是一维的,也比较好改。

这个是二叉树递归套路的老题了,什么路径,贪心都可以用这个递归套路做。

在这里插入图片描述

正所谓是温故知新,我们正好回来复习一下,虽然这个二叉树递归我真不知道还能说啥了,就是向左右子树要他们根节点到叶子结点的最大权值和,然后加上自己的根节点。

这里唯一的一个要注意的点,就是他要到的是叶节点,所以递归的跳出条件要注意

最后再来两道题

在这里插入图片描述

这个题的经典思路:从右上角去找,这个数如果大于他,因为知道下面的一定大,往左走,如果小于他,就知道左边的一定小于他,往下走。
这个思路看完就能明白,我们的复杂度是m+n级别的,比遍历的m*n好多了

回家题

在一个二维数组中,每一行中,0一定在1的左边,可以只有0或者1.返回含有1数量最多的行
在这里插入图片描述

如果,我们之前没有说前面那个题目,可能大家真的就遍历去做了,不过这道题确实可以和上一个走一样的路径,从右上去左下。是1左走,是0下移。走到越界就行。

发现了吗,其实题是没数的,但是模型和思路是有数的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值