- 博客(32)
- 收藏
- 关注
原创 第八章 贪心算法 part05
这道题实际上还是跟前面最少弓箭射爆气球的问题一样。只需要注意最后一个intervals我们实际上没有放进去即可。划分字母区间首先需要找到这个字母出现的最远位置。然后再去遍历,知道我前面所有字母出现的最大的最远位置等于下标即可相等。这个题实际上就是最少弓箭射爆气球的翻版,瞬秒。
2023-04-06 02:10:40
186
原创 第八章 贪心算法 part04
这个题目最主要的就是要考虑我们应该怎么样排序。其实我记得跟前面我做的分发糖果很像,两遍遍历,这个是先按照身高排序,然后用一个vector按照排好序的元素的第二个元素插入即可,这样就可以满足条件。也是先排序的思想,按照左边界排序以后,比较这一个和前一个,只要这一个的左边界小于前一个的右边界,那就可以一支箭完成任务,要不然需要多一支箭。题目比较基础,只要保证最先用10元的就行。
2023-04-06 01:57:34
146
原创 第八章 贪心算法 part03
这道题主要是思路不好想。这里我们需要保证首先总的cost和总的gas必须相等。其次需要考虑的是只要当前的gas减去cost加上之前剩下的能大于0,就说明可以走完整段路。这里是对整体进行绝对值排序。先将绝对值大的负数取正以后,如果还有多的,那就对绝对值最小的取反。这道题最常见的思路就是直接进行k次sort排序,每次将最小的取反。这里提供另外一种思路。这个题目其实没有很难,只需要从两边依次考虑就可以了。算是hard里面比较简单的问题。
2023-04-05 05:51:05
147
原创 第八章 贪心算法 part02
其实第二题完全可以解决第一题的问题。直接排序就可以了,只要后一个比前一个大就行。这道题主要是跟下面一道题进行对比。
2023-04-05 05:18:39
147
原创 第八章 贪心算法 part01
从头开始遍历,当前面的sum小于0时,说明前面的数字只会对其进行负面帮助。因此,此时count计为0,从新开始相加。单调平坡和不单调平坡。根据前后的差进行评判。贪心思路,用最小的饼干去满足。当遍历完孩子或者饼干就退出。
2023-03-31 06:39:54
154
原创 第七章 回溯算法part05
这个题唯一需要注意的就是递增子序列中需要考虑不是升序的情况。也就是事先不能进行排序。因此,我们不能使用used数组,只能使用set进行查询。每次i都是从0开始,但是因为是排列,所以不能重复。用used数组来进行去重。不过这个算是树枝去重而不是树层去重。树枝去重和树层去重的结合。一直做下来应该没什么问题。
2023-03-29 07:49:53
68
原创 28 第七章 回溯算法
子集问题于前面的分割问题和组合问题,只有一个区别。每次回溯先将结果放进去。因为回溯需要考虑的是每个节点都必须放进去。在子集问题的基础上,多考虑了一步,树层去重。这道题其实跟前面的分割很像。或者说,差不多就是一道题。
2023-03-28 14:26:01
53
原创 第七章 回溯算法part03
这个题目多了一个树枝去重和树层去重。这道题与后面的一道题目很像。这道题可以用used数组来进行操作。但是后面那个题只能用uset。因为这道题可以排序hhhh。这道题的唯一区别就是他是分割位置的回溯。因此,只有满足条件的时候才会进行下一步递归。要不然直接继续判断下一个位置是否可以。这些题都做了好几遍了。看到就有思路了 hhhh。
2023-03-27 04:04:03
66
原创 第七章 回溯算法part02
如果这道题还需要考零和一的话,这样写是有问题的,要么提前在字符串中修改,要么就在递归中改。相比于上道题,这道题仅加了一个和的判断。
2023-03-25 05:15:27
71
原创 第六章 二叉树part09
这个题目跟删除节点很像。但是需要注意的是,不能直接返回root->left,因为不能确定后面的子树是否符合情况。这道题目如果要是有序数组的话就很好想了。二叉搜索树的话,也是用到双指针,记录下前一个值然后相加即可。这道题就是前面的构造二叉树。了解左右区间的分割即好。
2023-03-24 05:25:04
52
原创 第六章 二叉树part08
这道题我最开始想的有点问题,以为是后序,其实不是。因为二叉搜索树的特性,只需要从根节点遍历就可以了,直到找到一个节点的val在给的p和q之间就行。这道题比较复杂的就是关于删除情况的讨论。五种情况:没找到,叶子节点,左空右不空,左不空右空,左右均不空。二叉树的公共祖先跟这个二叉搜索树的公共祖先其是一个意思。但是二叉搜索树可以简单一点。这道题目刚开始看好像没有思路,看了讲解以后发现这么简单。
2023-03-23 08:51:03
57
原创 第六章 二叉树part07
这道题目有一个很朴素的想法,直接中序遍历,然后用map统计出来所有对应的,然后自定义排序,寻找所有与最大相等的元素重新放入一个数组即可。这道题属于典型的后序遍历,其次我们看到题目要求,pq一定存在于这颗树中,所以不需要考虑pq不存在的问题。至于在树上的遍历操作,不如将他们都转化为数组上的操作。树上的遍历后面还需要我在看看。记住二叉搜索树的特性,中序遍历升序即可解决。
2023-03-21 06:08:01
53
原创 第六章 二叉树 part06
这个题就是一个简单的二叉树搜索。我最开始是直接返回了searchBST,但是最外层没有。我就改了方式,用一个变量接住他。但是我后来看了看答案,发现直接在外部添加一个return NULL就可以了。合并二叉树和前面的对称二叉树或者相同二叉树都是一个思路。从头开始一个一个遍历结点。感觉这个可以算是前序遍历了吧。该题目和前序中序遍历构造二叉树一样,都是找到index后分割数组。只需要中序遍历即可。中序遍历如果是升序数组,则为二叉搜索树。注:二叉搜索树的中序遍历为升序数组是一个重要性质。
2023-03-20 06:17:22
55
原创 第六章 二叉树 part05
这道题目需要注意的是什么时候回溯什么时候不回溯,以及回溯的对象是谁。所以对于每个left和right的pop实际上就是每次left和right加进去以后,你改变了path的值,所以才需要pop。如果你不是采用地址修改,直接复制的话,那么就不需要popback了,但是这样的速度会很慢。这里与传统的回溯也是一样的,需要仔细思考。这个题目其实跟后序中序构建二叉树一样,前序和后序的目的均为找到root,然后中序切割数组。因此我们可以得到,如果使用前序后序我们是无法得到一个二叉树的,或者说无法确定一颗二叉树。
2023-03-19 07:24:23
49
原创 110.平衡二叉树
这个题目的思路与前面提到的一样。首先确实是递归,然后判断左右两边的高度差不能超过一,所以求高度使用后序遍历。这样我们就得到了最重要的条件,使用后序遍历求解。
2023-03-19 05:49:04
52
原创 第六章 二叉树part03
这道题与接下来的题目有异曲同工之妙,但是需要注意的是求最小深度并不是单纯的将max改为min,需要注意终止条件:为空节点的时候,注意返回INT_MAX,只有当遇到叶子结点的时候才会返回1.本题求二叉树的最大深度即为求二叉树的根节点的最大高度,明白了这个可以用后序遍历球高度。前序遍历的处理逻辑为中左右,但是这里我们需要注意的是,这里的中不需要处理逻辑。二叉树的高度是指该节点到叶子结点的最长的简单路径的边数,即该节点到叶子结点。二叉树的深度是指该节点到根节点的最长的简单路径的边数,即该节点到根节点。
2023-03-19 05:28:35
52
原创 第六章 二叉树 part02
这道题目主要利用迭代法进行求解。实际上就是对于queue的理解。我们只需要记住类似的方法,对于迭代法其实不需要很多理解,只需要掌握递归就能解决大部分题目。实际上就是比较左子树的左和右子树的右,以及左子树的右和左子树的左。我要全部ac(116和117我有问题,这个之后解决)
2023-03-19 05:00:35
50
原创 day 14 第六章二叉树
二叉树的递归遍历较为简单基本上就是左中右的位置不同。右:traversal(root->right)左:traversal(root->left)中:res.push(root->val)三个语句放的位置不同,遍历结果就不同。
2023-03-15 02:01:25
188
原创 day 13 第五章 栈与队列
239. 滑动窗口最大值 (一刷至少需要理解思路private:public:while(!if(!i++) {i++) {这个题目最简单的暴力解法就是对每个窗口都进行遍历,因此时间复杂度会达到n方级别,超出了时间限制。因此用自己够早的队列来存放,并且保证队列的顶端一定是最大值。我们只需要关注最大值即可。也不需要担心最大值删除问题,自己定义的pop本身就会当遇到最大值的时候将其删除。347.前 K 个高频元素。
2023-03-14 02:51:07
431
原创 day 11 第五章 栈与队列
这道题目是后序遍历,我们正常看的应该是中序遍历我们常见的算术表达式。此时我们可以遇到一个左括号,相对应的存入匹配的右括号到stack中。因此对每个不是运算符的直接push到stack中,然后遇到运算符以后,pop出来两个数字进行操作,然后在放进去,继续遍历。对于有效括号,我们需要考虑的是什么情况下不匹配。此时我们最后需要判断stack是否为空,如果不为空则说明遇到的左括号多了从而导致放进去的右括号也多了。在每一次进行栈顶元素比较的时候都需要判断此时栈是否为空,为空的话就说明左括号不够了。
2023-03-11 05:13:59
486
原创 第五章 栈与队列
/ 因为pop函数弹出了元素res,所以再添加回去。// 只有当stOut为空的时候,再从stIn里导入数据(导入stIn全部数据)int res = this->pop();// 直接使用已有的pop函数。考察基础的栈与队列的知识,我们需要知道的是这里的用栈实现队列的话需要两个栈。// 从stIn导入数据直到stIn为空。
2023-03-11 04:53:28
573
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人