leetcode
文章平均质量分 64
一个数学不怎么好的程序员
在虚空中,你一天都不能渡过
展开
-
二叉树初阶OJ题(内附递归图解,思路)(建议收藏!!!)
文章目录1.单值二叉树解题思路代码实现图解递归2.二叉树的最大深度解题思路代码实现图解递归3.翻转二叉树解题思路思路1:代码实现思路2:代码实现图解递归解法1递归分析解法二图解递归4.对称二叉树解题思路代码实现图解递归5.两个树是否相同解题思路代码实现图解递归6.二叉树的前序遍历解题思路代码实现7.二叉树的遍历及构建解题思路代码实现图解递归8.平衡二叉树解题思路解题思路1:代码实现解题思路2:代码实现图解递归解法一图解递归解法二图解递归9.另一棵树的子树解题思路代码实现1.单值二叉树解题思路1.判原创 2021-09-10 11:58:02 · 1006 阅读 · 64 评论 -
Topk问题的三种求解方法
Topk问题的三种求解方法什么是Topk问题方法一:堆排序法方法二:把N个数建堆,取出前k个方法三:建一个k个数的堆什么是Topk问题其实顾名思义,这个问题也就是在N个数中找出前k个最值。在我们的日常生活中,很多地方都有Topk问题的影子,例如我们在点外卖时,总会说这家店是某某市的多少名,其实这些都是用Topk问题的解决方法得出来的。方法一:堆排序法这也是最容易想到的一种方法:我们可以将N个数排成有序的,然后输出前k个最值,而在我们已学过的排序算法中,堆排序的时间复杂度又是最快的(O(n*lo原创 2021-09-02 17:11:50 · 5973 阅读 · 41 评论 -
【每天学习亿点点系列】——栈和队列OJ题
????【每天学习亿点点系列】——栈和队列OJ题1.用队列实现栈图解代码实现2.用栈实现队列图解代码实现这两题的对比3.循环队列用数组还是链表实现注意点1.如果判断为空还是为满了?2.注意索引越界的问题解决方法代码实现1.用队列实现栈图解既然要用两个队列实现栈,那就肯定会跟队列的性质有关系,肯定是来回换来换去,下面我们就来看看这个过程。代码实现typedef struct { Queue* q1; Queue* q2;} MyStack;/** Initialize原创 2021-08-22 13:57:04 · 520 阅读 · 19 评论 -
【每天学习亿点点系列】——栈OJ题:有效的括号
????【每天学习亿点点系列】——栈OJ题:有效的括号题目解决思路代码实现图解代码段题目解决思路第一次做这个题目时肯定是没有思路的,也不会想栈的方向去想,但当你有了一定经验以后,你会发现它比配时有些符合栈的特点,它后进先出的特点正好可以帮助我们完成这一题:利用栈的特点,我们遇到数组中的左括号就入栈,直到此时它遇到第一个右括号,那么出栈顶的数据,此时不正是出的距离刚刚那个右括号离的最近的括号吗,如果比配的话,就继续迭代下去。代码实现至于这个代码里面栈的实现,就不放在这篇博客里了,不熟练的可以原创 2021-08-19 16:54:56 · 297 阅读 · 13 评论 -
【每天学习亿点点系列】——单链表OJ题
????【每天学习亿点点系列】——单链表OJ题1. 链表的回文结构题目方法一:翻转后半段,与前半段对比代码实现方法二:数组法(不推荐)代码实现2.相交链表题目解决方法代码实现3.环形链表解决方法代码实现1. 链表的回文结构题目方法一:翻转后半段,与前半段对比如果在你写完链表寻找中间节点,和链表翻转后再来写这题,就选的很轻松,因为这就是那两题的考察。你想想是不是,如果你找到中间节点,再翻转一下后半部分,与前半部分一对比,如果都相等则是回文。代码实现/*struct ListNode {原创 2021-08-17 21:16:07 · 266 阅读 · 6 评论 -
【每天学习亿点点系列】——环形链表这些点你思考过吗?
????【每天学习亿点点系列】——环形链表这些点你思考过吗?题目证明方法一:利用证明的猜想来实现代码实现代码二:转化为两个链表找相交节点的问题代码实现题目在写这题之前,最好先要知道如果判断一个链表是不是环形链表,如果它都不是环形链表就更谈不上找入环节点了,至于这一点,读者可以看看我之前的博客,里面有讲解过然后判断。证明要想更快的解决这题,首先我们要正面一个猜想,证明过程如下:方法一:利用证明的猜想来实现代码实现Node* slow = head; Node* fas原创 2021-08-17 21:15:30 · 208 阅读 · 12 评论 -
【每天学习亿点点系列】——单链表OJ题
????【每天学习亿点点系列】——单链表OJ题1.反转单链表题目方法一:原地改变原链表的指向代码实现方法二:头插法图解头插法代码实现方法三:递归代码实现2. 链表中间节点题目方法一:记录总共多少个节点,然后找到它的一半的那个节点实现代码方法二:快慢指针代码实现1.反转单链表题目方法一:原地改变原链表的指向这种方法很容易理解,实现也比较方便,只需要用三个指针,分别为前一个位置,当前位置,后一个位置来完成就可以实现代码实现struct ListNode* reverseList(struct原创 2021-08-16 21:45:29 · 673 阅读 · 16 评论 -
【每天学习亿点点系列】——OJ203题:移除链表元素
????【每天学习亿点点系列】——OJ203题:移除链表元素题目思路代码实现注意点1. 不要以为cur就是head节点反例2.特殊情况找第一个不为val节点时当nnext为空指针时,不能再对它访问了3.在你找第一个不为val的节点时要一起移动题目思路有了前面顺序表和oj题的练习,像这种题一看三指针一定可以解决。我们用三个指针:pre记录当前位置的前一个位置的,以便删除当前位置后重新连起来链表;cur记录当前位置,判断是否为val的值,是则删除节点,不是则往后移动(一起往后移动);nnext(为了不原创 2021-08-14 20:18:08 · 596 阅读 · 10 评论 -
数据结构OJ题——移除链表元素
数据结构OJ题——移除链表元素方法一:在原链表的基础上遍历方法二:重新创建一个空链表,进行尾插总结对比方法一:在原链表的基础上遍历struct ListNode* removeElements(struct ListNode* head, int val){ while (head != NULL && head->val == val) { head = head->next; } if (hea原创 2021-08-02 11:47:26 · 611 阅读 · 1 评论