- 博客(126)
- 收藏
- 关注
原创 找出第 K 大的异或坐标值
原因是 [ i-1 ] [ j ] 和 [ i ][ j-1 ] 在异或之前内容中,他们各自都把pre[ i-1 ][ j-1] 异或了一遍,也就是最终结果 pre[ i-1 ][ j-1]被异或两次,我们知道,一个数被连续异或两次后结果为0,所以这里需要补上pre[ i-1 ][ j-1 ]我第一次做这道题时创建除了最后的排序数组,还特意创建了一个二维数组,也就是pre用来保存,结果最后空间不够超时了。内所有元素进行异或得到的,然后我们需要在mmtask中找到第k大的元素返回。)执行异或运算得到。
2024-05-26 15:51:48 437
原创 692. 前K个高频单词
这道题麻烦的是按照字典序去排列,sort是对随机迭代器进行排序的,而map是双向迭代器,也就是说map是无法使用sort的,所以我们在上边倒来倒去的倒数据,这道题就是用map统计一下频率然后按频率排序即可,这里需要给sort设计一个仿函数,让频率大的在前面,如果使用原始的sort,那么会面临因为sort是不稳定的排序,所以要自己加一些条件,或者换一个稳定的排序函数,比如stable_sort,接着我们把前k个放在一个vector里返回即可。"i" 和 "love" 为出现次数最多的两个单词,均为2次。
2023-09-03 15:44:19 201
原创 145. 二叉树的后序遍历
假设我们访问这颗树,我们访问到了3,我们要访问完3的左子树和右子树,然后再访问3,我们的栈里面有8,3,但是我们不知道此时右子树有没有被访问,也就不能访问3,所以我们需要一个prev,如果我们访问的上一个节点是1,也就是3的左子树的根,那么说明3的右子树还没被访问,如果是6,也就是3的右子树的根,说明3的右子树已经被访问了,我们就可以访问3。这里大体思路不说了,说一下不一样的地方。本题与前序的那道题比较类似。后面遍历有一个麻烦的地方。给你一棵二叉树的根节点。
2023-08-27 17:12:35 97
原创 144. 二叉树的前序遍历-C++
接着栈顶元素就是3了,我们访问3,然后pop一下,再访问3的右子树,也就是6,按照刚才的规则,把6和4入栈,接着就是4被访问,pop掉,6被访问,pop掉,访问6的右子树,也就是7。我们在访问一棵树,按照前序遍历,我们最先访问的是左路节点,也就是8,3,1,所以我们就可以把树分为两个部分,一个是左路节点,另一个就是左路节点的右子树,我们把左路节点入栈。然后我们取栈顶元素,也就是1,我们访问完了1,然后pop一下,接着访问1的右子树,1的右子树为空,不用管。
2023-08-27 16:02:22 227
原创 JZ36 二叉搜索树与双向链表
题目来源:牛客网题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构4.你不用输出双向链表,程序会根据你的返回值自动打印输出。
2023-08-27 11:19:34 101
原创 236. 二叉树的最近公共祖先
q,并且pq均在给定二叉树中,所以我们可以这样做,我们先分析一下,如果pq都在左树,那么公共祖先就一定不会在右树,反之亦然,所以我们可以把它分解为多个子问题,写成递归,另外,如果根节点就是p或者q,那么根节点就是公共祖先,我们创建4个bool值,用来进行判断pq在哪里,然后根据不同的情况进行递归即可(另外,这道题的时间复杂度为O(N^2),比如左树非常长,右树为空时,就会为N^2)举个例子,我们找7和4的公共祖先,是2,那么我们先判断7和4在哪里,在3的左树,在5的右树,是2的左右,那么祖先就是2。
2023-08-25 17:11:56 119
原创 606. 根据二叉树创建字符串
分析题得知,本题就是一个前序遍历,然后在遍历前后输出括号,再次分析可以得出,1.左为空,右不为空,左右括号保留,2.左为空,右为空,括号不保留,3.左不为空,右为空,左括号保留。我们看第一个if,使用了或者,左右子树只有存在一个就给左边加括号,这样就解决了1的一半和3,再看第二个if,右不为空就给右加括号,解决了1的剩下一半,2是不加括号,所以不用管。初步转化后得到 "1(2(4)())(3()())" ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)"。空节点使用一对空括号对。
2023-08-25 16:40:48 89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人