随笔分类 -  leetcode

摘要:仅供自己学习 思路: 因为这个是有一定规律的使用运算符,那么就存在一定周期,所以我们就可以考虑一个数conut通过模这个周期来判断此时可以用哪个运算符。又因为这是滞后计算,那么就用栈。 我们从N这个数往0减小,我们可以知道从第一个数 相乘到加上最后一个数,总共有4个数,那周期就为4.首先对于相乘的数 阅读全文
posted @ 2021-04-01 12:39 Mrsdwang 阅读(61) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 刚开始看题感觉会很简单,因为只要改变最后一个节点的next和上一个节点的next就可以了嘛,但是发现如何定位最后一个结点的上一个节点呢。然后就想两个for循环每次移动都遍历一次找到最后一个节点,然后就超时了。 因为当K>链表长度后,移动后的链表相当于 只移动了链表长度-(K-链 阅读全文
posted @ 2021-03-31 17:20 Mrsdwang 阅读(43) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 这个类似的题都是可以采用递归的方法。因为这里涉及到去重,他的去重是指[1,2]和[2,1]同时存在res数组里面,而不是如[1,2,2]里面不能有重复元素。那么我们去重复结果的做法就是先将nums排序,然后进入递归,我们每次递归传入的开始的位置为该次位置start+1,进入递归 阅读全文
posted @ 2021-03-31 13:45 Mrsdwang 阅读(26) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 直接通过下标的关系获得对角线元素计算,左上到右下的关系为matrix[ i ][ i ],右上到左下为matrix[ i ][row-i-1],那么直接从i计数到row,同时加上上左上到右下与右上到左下的元素,最后判断row为奇数还是偶数,如果是奇数,那么就要把中心的元素减掉, 阅读全文
posted @ 2021-03-31 11:41 Mrsdwang 阅读(60) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 因为是二叉搜索树,所以我们遍历树即可,判断他是否等于val,等于就直接返回这个节点,如果小于,就指向节点的右子树,如果大于,就指向节点的左子树。如果循环结束还没找到就return NULL即可 代码: 1 /** 2 * Definition for a binary tree 阅读全文
posted @ 2021-03-31 00:12 Mrsdwang 阅读(30) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 可以使用原地算法进行反转,首先我们将整个string反转,然后对每个单词进行单独的反转,那么这里有个问题就是,如何解决多余的空格,让string只有在相邻两个单词之间才会有空格。 如图所示。 首先我们需要一个变量idx来作为指导赋值的索引指针。然后对原string进行遍历,首先 阅读全文
posted @ 2021-03-30 23:47 Mrsdwang 阅读(53) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 因为题目给出了矩阵的特性,每一行是从左到右递增,每一行的第一个元素都大于前一行的最后一个元素,那么就可以通过第一列的元素和target进行大小比较,找到第一个大于target的元素的行,然后将这个行记录并减一,就得到target所在的行,那么在对着行进行搜索即可。 代码: 1 阅读全文
posted @ 2021-03-30 17:46 Mrsdwang 阅读(55) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 因为要找到后续元素大于当前元素的位置,那么就具有滞后性,我们需要保存当前元素的位置,然后再往后找更大的元素。 对栈的用法如下; 我们正向遍历T数组,如果栈空那么我们肯定得先加入元素。 循环判断当前遍历到的元素和栈顶元素的大小,如果大于那么就把 当前元素的位置-栈顶存放的位置 的 阅读全文
posted @ 2021-03-29 18:46 Mrsdwang 阅读(39) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 如果我们按照每个箱子装载的单元数量降序排序,然后每次只要箱子数量小于tracksize就一直从大的获取加入。 代码: 1 class Solution { 2 public: 3 int maximumUnits(vector<vector<int>>& boxTypes, i 阅读全文
posted @ 2021-03-29 17:06 Mrsdwang 阅读(26) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 第一个O(M+N)的空间复杂度。因为是原地算法,所以当我们根据0的位置更改为0后,我们再次遍历到0就会无法判断原来就是0还是更改后为0的。所以需要一个M*N的数据结构来记录原来为0的位置。 第一种 copy一个matrix,然后遍历copy的,如果有0就在matrix更改即可。 阅读全文
posted @ 2021-03-29 17:04 Mrsdwang 阅读(51) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 全排列,每个点都和其他所有点有不同顺序的排列。可以用DFS,但是是每DFS一次都要从头开始遍历组合,因为是全排列嘛,那这就出现一个问题了对于 1,2,3,4这个数组,我从2开始组合,会从第一个开始,2,1,选了1后又会重新开始遍历组合,遇到1,2,都已经不能再添加了,那么我们就 阅读全文
posted @ 2021-03-29 16:50 Mrsdwang 阅读(37) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 这种简单的题可以有更深层次的讨论。 先给出两种方法的代码: 首先是直接更改nums数组: 1 class Solution { 2 public: 3 vector<int> runningSum(vector<int>& nums) { 4 5 for(int i=1;i<n 阅读全文
posted @ 2021-03-29 16:45 Mrsdwang 阅读(43) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 因为要建立的最小高度的的二叉搜索树,且已经升序排序,根据左小右大的原理,我们可以通过二分,每次以部分区间的中心节点作为父亲节点,这样能保持两端平衡而达到最小高度。再将mid点左边的作为左子树再次递归,右边作为右子树再次递归,就能满足左小右大。 代码: 1 /** 2 * Def 阅读全文
posted @ 2021-03-29 16:32 Mrsdwang 阅读(49) 评论(1) 推荐(1)
摘要:仅供自己学习 思路: 贪心,遍历所有数据,每次取最小的边作为该矩形能切割成最大的正方形的边,然后判断是否比之前获得的maxlen更大,如果大那么久更新maxlen为更大的边,并且计数归1重新开始。如果该切割的边等于maxlen,就计数即可: 1 class Solution { 2 public: 阅读全文
posted @ 2021-03-29 16:30 Mrsdwang 阅读(37) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 这种有计算顺序的题,可以用栈解决,同样是滞后如何处理的问题。遍历token,如果是数字就加入进栈,如果是运算符号,就取出栈顶和栈顶前一个数进行计算,并把这两个数pop掉,然后再把结果加入进栈。 因为token的元素是string,所以用int类型的栈时候,加入数字,得用c_st 阅读全文
posted @ 2021-03-29 16:05 Mrsdwang 阅读(53) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 用hashmap存,将每个元素-‘0’然后得到的值作为索引,然后在加1,并判断如果这个索引的元素大于1,那么就有重复的元素,返回false; 1 class Solution { 2 public: 3 bool isUnique(string astr) { 4 unorde 阅读全文
posted @ 2021-03-29 15:46 Mrsdwang 阅读(54) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 直接用一个队列添加请求,并判断所有队列中的请求时间被 t 减是否大于3000,如果大于3000则超过了[t-3000,t]的范围,就pop出去。最后返回queue的大小就可以。 1 class RecentCounter { 2 private: 3 int req=0; 4 阅读全文
posted @ 2021-03-29 15:37 Mrsdwang 阅读(30) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 这种要找出让树出现环而不成为树的边,可以通过查并集来寻找,因为当我们按顺序遍历所有节点。如果是树,那么就会遍历所有边到的都是目前的新结点,也就是没有加入树,不是同一个查并集里面的,也就不成环了,遍历后才会加入树才进入相同的查并集,但如果遍历边,边的两个端点是同一个查并集的,那是 阅读全文
posted @ 2021-03-29 15:29 Mrsdwang 阅读(48) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 直接判断每一个位有没有1,如果有1,计数一次即可。 因为二进制每个位的关系是2^N-1,所以我们用n & (1<<i)即可判断每个位是否为1,1<<i 是将1位移i位,即把第0位的1左移i位。 代码: 1 class Solution { 2 public: 3 int ham 阅读全文
posted @ 2021-03-29 15:17 Mrsdwang 阅读(43) 评论(0) 推荐(0)
摘要:仅供自己学习 思路: 因为是left到right范围内的所有元素的相与和,所以如果这个范围的数的二进制如果每一位都有0,那么最终就是0。如果不为0的话,那说明范围内所有数的某个位都为1。 所以相与是公共前缀,即相同的高位加上后续的全为0,那么和我们只需要一直右移到left和right相等即可,此时就 阅读全文
posted @ 2021-03-29 15:16 Mrsdwang 阅读(45) 评论(0) 推荐(0)