随笔分类 -  leetcode

摘要:思路: 要求找离根节点最近的叶子节点,那么就DFS遍历下去,定义一个数来记录当前的节点到最近的叶子节点的距离,然后每次递归得到的距离都和这个最近距离比较,如果小就更新。 代码: /** * Definition for a binary tree node. * struct TreeNode { 阅读全文
posted @ 2021-04-15 20:06 Mrsdwang 阅读(44) 评论(0) 推荐(0)
摘要:思路: 最近发现动规很多都是从后面开始想,这题就是先考虑,第一个房子不偷和最后一个房子不偷的情况。 第一个房子不偷,就是nums[1:],最大金额是P2,最后一个房子不偷,就是nums[:n-1],最大金额是P1,那么取max(P2,P1) 对于第n个房子,如果偷了第n-1个房子,那么第n个就不偷, 阅读全文
posted @ 2021-04-15 11:51 Mrsdwang 阅读(25) 评论(0) 推荐(0)
摘要:思路: 排序后贪心 对所有nums里的元素进行排序,然后从后向前遍历,因为已经从小到大排序了,那么我们直接取最后三个数进行判断,即nums[i]<nums[i-1]+nums[i-2]是否满足,如果满足就break输出,因为是从最大的取,所以满足那一定是最大的周长,否则i-1,从倒数第二个开始,继续 阅读全文
posted @ 2021-04-14 16:49 Mrsdwang 阅读(30) 评论(0) 推荐(0)
摘要:思路: 可以用两个数组分别存奇数和偶数元素,然后再对原数组遍历,当下标为奇数就从存放奇数的数组拿出一个,当下标为偶数时就从偶数的数组拿出一个。 时间复杂度O(n),空间复杂度O(n) 另一个是原地算法,用两个指针,一个检测奇数位是否有偶数,另一个检测偶数位是否有奇数。 首先先用检测偶数位的指针遍历, 阅读全文
posted @ 2021-04-14 16:30 Mrsdwang 阅读(32) 评论(0) 推荐(0)
摘要:第一次见到前缀树这个词,就先认识一下吧。 该题题目说:Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 既然是存储字符串,那么一个父亲节点应该有26个子节点。因为保存一个字符串还需要有 阅读全文
posted @ 2021-04-14 12:34 Mrsdwang 阅读(46) 评论(0) 推荐(0)
摘要:思路: 是二叉搜索树,那么就中序遍历吧,这样就能不用求绝对值。 需要写一个void函数,如果用原函数要返回int,会影响取最小值,且传入参数要用引用。 我们定义一个存储当前最小值res和上一个节点的值的变量pre,分别初始化为INT_MAX和-1. 然后传入root,res,pre,首先判断pre是 阅读全文
posted @ 2021-04-13 13:45 Mrsdwang 阅读(28) 评论(0) 推荐(0)
摘要:思路: 我们需要一个指向已排序链表的最后一个元素的指针lastsort,一个cur指针指向当前用来排序的元素。为了避免head被改变导致错误,还需要一个dummy指针指向head。 首先lastsort指向head,cur指向head->next。然后遍历链表,判断lastsort是否小于cur,如 阅读全文
posted @ 2021-04-12 16:24 Mrsdwang 阅读(45) 评论(0) 推荐(0)
摘要:思路: 这道题就需要对比没对数,ab和ba谁更大。那么我们就把nums的元素都放入vector里面,这样string类型利于a+b和b+a的合并。 然后通过调用sort函数根据函数a+b>b+a的lambda函数排序。 然后判断排序后的数组第一个元素是否为0,为0就return 0,否则就加入一个s 阅读全文
posted @ 2021-04-12 13:57 Mrsdwang 阅读(36) 评论(0) 推荐(0)
摘要:思路: hash_map存入一个数组的元素并计数,然后再遍历另一个数组如果hash_map存在这个元素,并且还没被减到0,那么就添加进res结果数组中并将hash_map计数减一。 代码: class Solution { public: vector<int> intersect(vector<i 阅读全文
posted @ 2021-04-11 23:42 Mrsdwang 阅读(26) 评论(0) 推荐(0)
摘要:思路: 题目给的是升序且无重叠的区间,那么我们通过遍历,不断加入数组进res结果数组里面,直到intervals[i][1]>newinterval[0]就停下。 这时在从这个i开始向后遍历,判断intervals[i][0]是否小于等于newintervals[1],如果满足,说明还存在重叠区间, 阅读全文
posted @ 2021-04-11 14:55 Mrsdwang 阅读(37) 评论(0) 推荐(0)
摘要:思路: 可以用hash_map存放一个string的元素并计数有几个,再遍历另一个string,查看hash_map有没有并且遍历到的这个字母的数量还有没有大于0,这样就能判断有没有相同和不同的字符并且数量相不相同了。 代码: class Solution { public: bool isAnag 阅读全文
posted @ 2021-04-11 14:06 Mrsdwang 阅读(35) 评论(0) 推荐(0)
摘要:思路: 可以通过计数0,1,2的个数,然后按照个数直接个nums重新赋值覆盖原来的值即可。 class Solution { public: void sortColors(vector<int>& nums) { int n=nums.size(); if(n==1) return; int n0 阅读全文
posted @ 2021-04-10 14:37 Mrsdwang 阅读(57) 评论(0) 推荐(0)
摘要:思路: 因为数组中可能有重叠的部分,而重叠的要求是 [L1,R1]和[L2,R2]相比 L2<=R1那么这两个数组就重叠。根据这个性质,我们能得到判断条件 如果R1<L2,那么我们就不用处理重叠,否则我们就需要取R1=max(R1,R2)。为什么是R1等于呢?因为我们默认[L1,R1]在存放结果的数 阅读全文
posted @ 2021-04-10 13:48 Mrsdwang 阅读(38) 评论(0) 推荐(0)
摘要:思路: 如果一个数为丑数,那么自然会被2,3,5整除,最后得到1,那么我们一直循环判断n是否能被2,3,5其中一个整除,如果能 那么n=n/(2 or 3 or 5)。如果三个数都不能整除那么就返回false。如果循环结束还没有返回false,那么就直接返回true。 代码: class Solut 阅读全文
posted @ 2021-04-10 12:10 Mrsdwang 阅读(47) 评论(0) 推荐(0)
摘要:思路: 首先是子序列,所以说并不一定要求是连续的序列满足摆动序列。同时题目要求的是最长摆动子序列的长度。 动态规划 那么我们可以考虑通过记录摆动的长度得到,什么是摆动的长度呢?我们可以用up和down两个变量来记录摆动的次数,如果前一个差为正数,当前差为负,那么就是遇到了一个down,模拟往下摆动。 阅读全文
posted @ 2021-04-09 20:27 Mrsdwang 阅读(65) 评论(0) 推荐(0)
摘要:思路: 这道题需要找规律了,因为题目是求有多少种方案获得平衡数组,那么就需要遍历所有元素。 首先 对于删除元素的左侧是可以发现不受影响的,但删除元素的右侧元素下标会-1,整体向左侧移动一个单位,那么原来在奇数位置的元素就会变到偶数位。所以我们只需要得到右侧的元素的和即可。 我们定义 int left 阅读全文
posted @ 2021-04-09 19:18 Mrsdwang 阅读(42) 评论(0) 推荐(0)
摘要:思路: 这道题虽然是困难,但和昨天的每日一题没区别,可以用二分秒了。 同样是利用二分的二段性,因为有重复的元素,所以找旋转点的时候去掉重复的元素,恢复二段性,然后剩下的就和昨天的代码一样了。 这个二段性真的理解太好用了,强烈推荐好好看看。 代码: class Solution { public: i 阅读全文
posted @ 2021-04-09 16:01 Mrsdwang 阅读(42) 评论(0) 推荐(0)
摘要:思路: 直接用大顶堆,每次取两个数来比较即可,难点是循环的条件为什么。 考虑两种情况,最后堆只有一个元素,那么就返回这个元素值,最后堆没有元素,为什么呢,因为我们每次去两个数,如果倒数第二步还剩下两个石头,且相同重量,那么最后就没有元素了。针对这两种情况都是堆的元素数量>1,因为最后结果只有1和0嘛 阅读全文
posted @ 2021-04-08 21:59 Mrsdwang 阅读(32) 评论(0) 推荐(0)
摘要:思路: 这道题有个要求就是(A)的得分要乘2,那这就有个问题了,如何记录一个括号之间有多少分呢,又该如何记录以前的分数,并能区分不是一个括号里面的之前算出来的分数。 又因为我们可能回下意识的把栈定义为char类型把'('放入栈里,这样就没思路了。 考虑题目说给的string一定是平衡括号对,所以我们 阅读全文
posted @ 2021-04-08 21:40 Mrsdwang 阅读(57) 评论(0) 推荐(0)
摘要:思路: 刚开始看到这题,没能准确理解意思,直接用两个指针分别从pushed的第一个元素开始往后,从popped最后一个元素向前,然后比较,不相等就return false,然后错误,对比了一下例子发现 pushed=[1,2,3,4,5],popped=[4,5,3,2,1]而不是[5,4,3,2, 阅读全文
posted @ 2021-04-08 21:03 Mrsdwang 阅读(40) 评论(0) 推荐(0)