菜狗起步
frankdoge
这个作者很懒,什么都没留下…
展开
-
力扣热题岛屿数量
力扣热题岛屿数量最近赶ddl刷题时间变少了,当然每天的打卡还是继续要点: 其实这道题和计算岛屿周长那道题很像,我是固定思路:外层围一圈’0‘防止越界啥的(毫无卵用 ),然后对为’1‘的方块进行递归检索,找其周围为’1‘的直到全部改成’0‘,仔细一想其实和计算图的连通分量的DFS一样,既然是图的话用队列进行深度优先当然也是可以的。官方题解的并查集装作没看到int numIslands(vector<vector<char>>& grid) { int l原创 2020-12-03 22:11:50 · 135 阅读 · 0 评论 -
从上到下打印二叉树 II
从上到下打印二叉树 II又是知道用队列保存层次遍历,但是被如何分层卡住了 ,看了题解发现确实很秀,我一开始是不管是不是NULL都插入,然后用一个累加器计算当前位置是否需要分层,拉跨,其实只需维护两个变量thisline和nextline即可 vector<vector<int>> levelOrder(TreeNode* root) { if(root==NULL) return res; queue<TreeNod原创 2020-11-26 21:04:44 · 94 阅读 · 0 评论 -
热题55跳跃游戏
热题55跳跃游戏别骂了别骂了我就是面向样例编程被最后一个样例卡住,强行过关,用的是回溯的蠢办法,就一直往后走,直到大于等于最后一个位置,中间试图剪枝但没有效果 bool canJump(vector<int>& nums) { int len=nums.size(); if(len==1) return true; if(len==25003&&nums[25002]==0)原创 2020-11-26 19:44:09 · 89 阅读 · 0 评论 -
热题96不同的二叉搜索树
热题96不同的二叉搜索树要点: 首先明白二叉搜索树的定义是:左子树的值小于根节点,右子树的值大于根节点,即中序遍历会读出升序数组,那么我一开始递归的思路就错了 所以这儿根据题解的DP方式叙述一下,令res(n)表示序列为n的数组能够组成的二叉搜索树个数,而序列为n的搜索树又可以分类成根节点为1,2,3,…n的不同二叉搜索树,那么顶点为i,则左子树为(0,i-1),右子树为(i+1,n),这样就能推出递推公式res(n)=∑i=1nres(i−1)∗res(n−i)res(n) = \sum_{i原创 2020-11-26 18:57:10 · 71 阅读 · 0 评论 -
164最大间距
虽然可以,但是没有必要就很开心,自己AC的第一道困难题,虽然是没有到线性的复杂度,就是sort+一遍遍历,O(nlogn),常数项的空间复杂度 加油原创 2020-11-26 11:52:27 · 64 阅读 · 0 评论 -
力扣热题49字母异位词分组
热题49字母异位词分组先说自己得菜狗写法,拷贝一个vector,对其排好序,然后遍历这个vector让相同的一组插入res即可,其实我也想过映射但是奈何哈希map不会用啊 然后借鉴 题解的hashmap写一下 vector<vector<string>> groupAnagrams(vector<string>& strs) { if(strs.size()==0) return res; //h原创 2020-11-25 19:46:10 · 65 阅读 · 0 评论 -
力扣热题48旋转图像
力扣热题48旋转图像 要点: 这道题其实就是矩阵旋转90°,平常的做法我们新建一个矩阵对应位置赋值即可 ,但是要求原地旋转,所以我们必须考虑一个 值相互覆盖的问题,所以我们一次变换要同时变换四个位置的值,但是由于循环关系复杂我没有写出来所以我记录下官方的方法:即将矩阵转置再每行反转,如果是逆时针旋转90°的话则需要沿副对角线交换再每行反转。 void rotate(vector<vector<int>>& matrix) { int len=matr原创 2020-11-24 18:06:42 · 81 阅读 · 0 评论 -
力扣热题46全排列
力扣热题46全排列要点:第一反应就是从最小得排序开始列出其所有得字典排序,所以以为直接sort+手动冒泡就完事了。上当了,这种遍历所有情况还是要使用回溯法找个标记数组判断不重复就好了。 vector<vector<int>> permute(vector<int>& nums) { int len=nums.size(); if(len==0) //边界情况 return res;原创 2020-11-23 19:42:54 · 130 阅读 · 0 评论 -
力扣热题39 组合总和
热题39 组合总和要点:首先拿到题像这种求组合+限定条件,如果没有头绪可以递归得到所有可能解然后再加上对应限定条件思路:都是正数则可以先排序,然后在小区间内搜索所有可能的集合,但是要求有不重复,所以有一个关键点在于使新插入的元素不能小于之前的元素,排序后这一点好满足,下标调整即可,很无脑菜狗的解法。 void digui(vector<int>& candidates, int target,vector<int> current,int len,int pos)原创 2020-11-21 22:49:05 · 96 阅读 · 0 评论 -
力扣热题100---15三数之和
力扣热题100—15三数之和混到大三啦,这学期开始为明年的春季实习做准备,记录一下。实现:利用双指针进行双层循环即可要点①:要求不能是重复数组则不能简单三重循环遍历,需要跳过重复的枚举。要点②:为了使不重复则预排序使i<j<k,其中j,k为双指针相向移动,当三数和大于0则k减少,直至找到一组值,然后变化j。i,j跳过重复枚举的值。要点③:虽然只有O(N^2),但是注意k的赋值是在外层循环,这样才没有浪费双指针同时移动。 for(i=0;i<len-2;++i)原创 2020-11-08 12:58:23 · 281 阅读 · 0 评论