每天一道Code
争取每天一道算法题!冲!
Toniht
这个作者很懒,什么都没留下…
展开
-
每天一道Code 706. 设计哈希映射
代码思路可以使用链地址法解决冲突。代码struct Node{ int key; int val; Node* next; Node(int _key,int _val): key(_key),val(_val),next(NULL) {} };class MyHashMap {public: /** Initialize your data structure here. */ const in.原创 2020-09-02 20:26:38 · 181 阅读 · 0 评论 -
每天一道Code 1372. 二叉树中的最长交错路径
代码思路DFS遍历每一个节点,它在父节点的交错路径上就代表它不可能作为根节点去dfs,而当前节点不在父节点的交错路径上就将它看做根节点dfs。在代码中使用的是0,1指代下一步前进方向。用全局变量存最大值。另外,在做完之后去看了眼题解和大佬们的思路,看到一个双百的题解思路和我差不多,我咋跑不出来双百,好气,改了改遍历顺序,玄学出来了一个过题时间208ms后面再怎么改都慢不了了(ノ ̄▽ ̄),更有趣的是交相同代码都要慢十几ms,再也没跑出来208ms,真·玄学过题。代码/** * Definit.原创 2020-09-01 17:17:57 · 201 阅读 · 0 评论 -
每天一道Code 144. 二叉树的前序遍历
代码思路递归的还是很简单的。题中强调是迭代。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vo.原创 2020-08-31 19:22:14 · 183 阅读 · 0 评论 -
每天一道Code 79. 单词搜索
代码思路第一反应就是普通的dfs。但是可能真的是因为半年没敲代码,很久没敲dfs了,疯狂debug。最后莫名其妙发现是因为LeetCode没有给出输入函数,自己憨批把输入函数写挂了。所以一个简单bug一直在莫名其妙的地方找。吐了吐了。ヽ(#`Д´)ノ就是需要回溯的dfs,当搜索失败时需要恢复标记的点。可以在原数组标记,也可以直接建一个标记数组。第一遍出Bug的代码(已修正bug)class Solution {public: int dxy[4][2] = {{0,1},{0,-1},{.原创 2020-08-30 20:24:00 · 168 阅读 · 0 评论 -
每天一道Code 814. 二叉树剪枝
代码思路第一反应应该就是递归解决。当前节点需要删除的条件有三个:当前节点值为0左子树没有1右子树没有1代码/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNo.原创 2020-08-29 22:37:45 · 147 阅读 · 0 评论 -
每天一道Code 222. 完全二叉树的节点个数
代码思路满二叉树只有两种情况:左边是第一种情况:子树高度相同,则左子树一定为满二叉树。右边是另一种情况:子树高度不同,则右子树一定位满二叉树。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right.原创 2020-08-28 15:36:46 · 118 阅读 · 0 评论 -
每天一道Code 面试题 04.03. 特定深度节点链表
代码思路简单层次遍历。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *//** * Definition for singly-linked list. .原创 2020-08-27 19:38:55 · 119 阅读 · 0 评论 -
每天一道Code 215. 数组中的第K个最大元素
代码思路最简单的就是排序一遍然后直接输出。时间复杂度就是排序的复杂度O(nlogn)O(nlogn)O(nlogn)优化就是使用快排思想,不全部排序,而是当找到的位置正好是要求的位置时,直接返回,否则通过判断K和当前位置的大小判断继续排序左边还是右边。这种思想最坏的情况时间复杂度等于直接排序输出的O(nlogn)O(nlogn)O(nlogn)。emmm平均时间复杂度不会证,又或者说太麻烦了懒得想。代码:class Solution {public: int quicksort(vect.原创 2020-08-25 17:10:12 · 116 阅读 · 0 评论 -
每天一道Code 102. 二叉树的层序遍历
代码思路bfs思想,因为直接遍历无法得到层次结构,因此,重新定义了一个结构体记录当前节点的高度。代码十分钟,debug两小时,leetcode的会员真贵,还是vscode手动debug,才发现建树都有点不会了。一个写顺手了的‘!’找了一个小时,我超勇的。(╬◣д◢)代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod.原创 2020-08-24 18:55:28 · 701 阅读 · 0 评论 -
每天一道Code 面试题 04.04. 检查平衡性
简单题直接递归,通过子树的平衡性及高度得到当前节点的平衡性。时间花费还是比较大,但是懒得再优化。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class S.原创 2020-08-24 16:29:11 · 111 阅读 · 1 评论 -
每天一道Code 23. 合并K个升序链表
代码思路:最傻的方法应该就是设一个ans,每次用第i个链表和ans合并,并存储在ans中,每个链表都合并一次。时间复杂度:设最长链表长度为n,所以第一次合并,ans也就是第一个链表,长度nnn,第二次合并,ans长度为2n2n2n,依次合并,第i个链表合并完ans长度为ininin,每次合并都是遍历一次,求和为∑i=1ki⋅n=k(k−1)2n\sum_{i=1}^{k}i·n=\cfrac{k(k-1)}{2}ni=1∑ki⋅n=2k(k−1)n 故时间复杂度O(k2n)O(k^2n)O(k2..原创 2020-08-23 19:02:54 · 1085 阅读 · 0 评论 -
每天一道Code 25. K 个一组翻转链表
代码思路K个一组翻转,那就想办法将K个节点放在一组。定义三个指针:locate定位要翻转的k节点个中最后一个,也就是翻转后的第一个。now定位翻转后的最后一个也就是当前的第一个。last定位的是这k个节点的前一个节点,方便插入操作。这样的话通过这三个定位指针我们就可以轻松实现翻转。详细的思路见代码注释。手绘图预警!通过结果还ok。具体代码:/** * Definition for singly-linked list. * struct ListNode { * i.原创 2020-08-22 17:19:50 · 108 阅读 · 0 评论 -
每天一道Code 面试题 02.04. 分割链表
解题思路:第一反应就是找一个中间点,小的扔一边,大的扔一边。顺手敲完麻烦的,再重新花了点时间简化。第一反应版本/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode.原创 2020-08-21 17:35:35 · 93 阅读 · 0 评论 -
每天一道Code 21. 合并两个有序链表
解题思路直接见代码注释。第一种常规思路,第二种递归。没系统学过C++。只能凭借平时打比赛积累的一点C++知识,顺带查一查资料来写代码,难受啊。练习注释的编写ing&代码风格重新调整ing/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * .原创 2020-08-20 17:12:26 · 114 阅读 · 0 评论 -
每天一道Code 19.删除链表的倒数第n个节点
简单算法(暴力)暴力很好想,没啥难度。扫一遍得到链表长度L。然后再扫一遍删第L-n个节点。没啥写的,代码难度看上去不难。一趟扫描就相当于找个人用长为n的绳子把你俩绑在一起,你不会走路了坐在轮椅上(0.0)。他走到终点,你也就走到倒数第n+1个节点的面前了,伸手就能拿掉第n个结点。整体上注意的点在于:你这两个指针,一个领头的leader也就是代码中的first到底走到哪里second才能刚好删除要删除的节点。万一要删除的是第一个结点怎么办。防止删除的是第一个节点:建立一个头结点。这样删除.原创 2020-08-19 18:50:51 · 100 阅读 · 0 评论