LeetCode
文章平均质量分 87
fucccck_ly
这个作者很懒,什么都没留下…
展开
-
力扣CV工程师刚学的拓扑排序!包教包会!
力扣CV工程师刚学的拓扑排序!包教包会!何为拓扑排序?拓扑排序例题Leetcode 207 课程表Leetcode 1203 项目管理其他例子何为拓扑排序?所谓拓扑排序,是有向无环图才有的一种排序。对于一个给定的包含n个节点的有向图G,我们给出它的节点编号的一种排列,如果满足:对于图G中的任意一条有向边(u,v),u在排列中都出现在v的前面。那么就称该排列是图G的拓扑排序。第一次读拓扑排序的概念可能会感觉难以理解,从这个概念上出发,我们需要捋清楚的问题是为什么只有有向无环图才有拓扑排序?原因很简单原创 2021-01-12 22:47:27 · 237 阅读 · 0 评论 -
子集划分是个什么东西?背包问题->动态规划?
子集划分是个什么东西?背包问题->动态规划?子集划分问题抽取子集划分问题解决思路其他题目子集划分问题抽取以上题目来自力扣494.目标和,本篇文章的重点在于提取出其中的一种类型问题,称为子集划分问题。所谓子集划分问题,是一个典型的背包问题,而背包问题,使用的是动态规划来解决。此题可以使用回溯方法来做,但由于一些重复的计算,时间复杂度会很高,因此可以转化为背包问题从而使用动态规划来解决来降低复杂度。子集划分问题解决思路子集划分问题,其实就是我们把nums数组分成两个子集A和B,分别代表分配+和原创 2020-11-13 23:59:40 · 604 阅读 · 0 评论 -
答应我 你一定要学会字典树!!字典树+Java实现+Leetcode题目--回文对
答应我 你一定要学会字典树写在前面字典树详解字典树概念字典树特点字典树应用字典树具体实现(Java)Leetcode原题结合理解写在最后写在前面大概是一周前的每日一题吧,当初初遇字典树,惊讶于其精妙,昨晚睡前的时候又看到字典树用于解决最长公共子前缀问题,想想具体实现,发现又给忘了,故今日抓紧时间整理,方便日后查看。本文章包括字典树概念的说明、使用场景以及leetcode题解的具体分析。字典树详解字典树概念先上个图,此图来自维基百科,先看看较为官方的定义:在计算机科学中,trie,又称前缀树或字原创 2020-08-18 11:52:05 · 216 阅读 · 0 评论 -
Leetcode——解数独
题目描述题目分析建议食用本题前先看看36.有效的数独,解数独也使用到该题里面如何判断重复的思路。本题用到的是回溯的思路,所谓回溯,其实就是在进行一步操作之后,违反了规则,而进行情景恢复的步骤,换句话说,回溯就是把你刚做的操作撤销,回到操作之前的样子,类似于Ctrl+Z。我们通过回溯的方法,对每一个格子填入1-9进行尝试,如果成功就进行下一步,失败即进行回溯,回到上一步。要填入一个数,...原创 2020-04-14 16:11:40 · 165 阅读 · 0 评论 -
Leetcode_翻转字符串里的单词
题目描述题目分析这道题用一些Java自带的方法还是比较容易解决的,主要问题还在在于对方法的不熟悉。题目解答class Solution { public String reverseWords(String s) { if(s==null && s.length()==0 ) return null; //除去前导空白和后续空白 ...原创 2020-04-10 17:48:35 · 96 阅读 · 0 评论 -
Leetcode——括号生成(深度优先遍历)
题目描述题目分析本题采用的是回溯算法(深度优先遍历算法),在看了一些博客之后,我对深度优先的理解是,往尽可能深的方向搜索,有点像二叉树的前序遍历,搜索停止的标志是到达边界或者找到结果。而之所以称为“回溯”,是在往一个方向搜索结束后,要跳转回上一节点,继续往其他方向搜索。在这一题中,由于字符串的每一次拼接都生成一个新的对象,因此不必回溯。到达每一个节点时,我们都有两种选择,一是加上左括号,...原创 2020-04-09 15:46:58 · 307 阅读 · 0 评论 -
Leetcode——重建二叉树
题目描述题目分析题目的要求很简单,给你两个数组,分别是前序遍历和中序遍历,要你还原二叉树。首先我们要明白的是二叉树的前序、中序以及后序遍历的区别以及特点,大家可以自行去网上搜索,相信有很多博主写的文章都能帮助理解。而我个人的理解方法呢,主要从名字入手,前序遍历,就是根节点在前头,然后再左右,就是根-左-右的顺序遍历;中序遍历呢,就是根节点在中间,也就是左-根-右的顺序;而后序遍历呢,就是...原创 2020-04-06 17:09:29 · 198 阅读 · 0 评论 -
Leetcode——生命游戏
题目描述题目解析本题是用一个二维数组保存细胞,细胞的死活跟当前数组里的值有关。如果按照正常做法去更新每一个而不使用辅助数组时,就无法满足题目要求,我们应该对数组进行同步更新。我们应该保存两个状态,一个是更新前的状态,一个是更新后的状态。那么我们可以用十位数来保存更新后的状态,个位数保存更新前状态。刚看到这道题第一想法应该是去遍历每个位置周围,存下1的数目来更新,但在评论区借鉴了某位...原创 2020-04-02 16:42:35 · 171 阅读 · 0 评论 -
Leetcode——地图分析
题目描述题目分析本题使用的思想是图的广度优先搜索(BFS),我们需要从陆地开始,向四周开始搜索,每次搜索都为海洋加上值,返回最后一次搜索的海洋的值即为所求的最大距离。树的BFS只有一个源点,但图的源点有多个,因此我们要用一个队列来保存他们,此题中的源点就是陆地的位置和他们所遍历过的海洋。刚开始的时候,源点应该是所有的陆地,以陆地为中心点向四个方向扩散,扩散到的地方打上标记,再把他们放入队...原创 2020-03-30 01:27:13 · 253 阅读 · 0 评论 -
Leetcode——卡牌分组
题目描述题目分析本题的要求是让我们把一个有重复数的数组分成若干组,而这些组至少也要有2个数;到此我们能找到两种特殊情况:如果原数组的长度小于2或者数组中某一个数的个数为1的话,那肯定是不可能满足要求的。我们可以先获取每个数的个数,然后通过判断这些个数的最大公约数是否大于1即可。注意,在第一次循环之后,x已经变成了两个数的最大公约数。还有一点是最大公约数的求解,我们可以通过辗转相除法来...原创 2020-03-27 11:44:18 · 126 阅读 · 0 评论 -
LeetCode——三维形体的表面积
题目描述题目分析刚开始很不理解题意,通过题解里面大神画的图片,终于理解题意,二维数组表示的是一个位置,该位置所存数据就是小正方体的个数,可以想象是你面对着一张纸,而小正方体往你的方向堆叠,求的是所形成的三维形体的表面积。我们通过分类每一个位置所提供的表面积数然后加起来获得结果。当目标位置不为0的时候,那么必定会有上下两个面,而它的4个侧面,取决于目标位置上下左右的情况,如果某一面相邻位...原创 2020-03-25 21:30:54 · 148 阅读 · 0 评论 -
Leetcode——按摩师
题目描述题目分析本题使用动态规划的方法,关于动态规划的思想入门,可参考这篇文章:动态规划入门,这一篇就够了将动态规划的思想应用在本题中,其实就是找出每个子数组中服务时间取最大的值。通过建立一个二维数组dp[i][j]来保存选择的情况,i代表的是第i+1天的情况,j的取值只有0或者1,代表是否选择接受预约请求。i=0时,表示第一天的情况,应该和后面的分类讨论。1<=i<=le...原创 2020-03-24 21:09:19 · 145 阅读 · 0 评论 -
Leetcode-数组中重复的数
题目描述题目分析题目思路比较简单,只需要找其中一个有重复的数字输出就好,可以先把数组进行排序,然后比较相邻两个数是否相同就好。时间:O(nlogn) 空间:O(1)题目解答class Solution { public int findRepeatNumber(int[] nums) { if(nums==null||nums.length<=0) ...原创 2020-03-24 11:20:26 · 152 阅读 · 1 评论 -
Leetcode——LRU缓存
题目描述题目分析首先是LRU缓存思想,LRU(Least Recently Used,最近最少使用),顾名思义,是淘汰最近最少使用的项目,其思想是如果数据最近被访问过,那么将来被访问的几率更高此时第一个想的是使用一个链表,最近使用的放在最后面,最近没用的放在最前面,来了一个新的数,就判断内存是否满了,把最旧的数淘汰再加入新数。为了方便移动数据,应该使用链表。对于这个问题,一共有两个需求...原创 2020-03-23 15:44:06 · 123 阅读 · 0 评论 -
Leetcode——平衡二叉树
题目描述题目分析首先是平衡二叉树的定义,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。先浮现在脑海中的是分别获取左右子树的深度,再对他们的差值进行比较。并且,每一个子树也必须是平衡的,因此也需要递归去判断他们。当然最先是特殊情况的处理,当树为空树时,它就是平衡的。而在每一个递归中,也需要判断是否为空。这个算法分成了两个方法,一个是判断树是否平...原创 2020-03-21 14:02:13 · 142 阅读 · 0 评论 -
Leetcode-回文数
题目描述判断一个int是否为回文数,回文数定义为首位置和末尾一样,如1234321,123321。题目分析刚开始想的是把数字翻转过来,然后跟原来的数字进行比较,但是要防止翻转后的数字会出现整型溢出的问题。所以不可以翻转全部,如果一个数是回文数,那么可以翻转他的后半部分跟前半部分进行比较。当然首先要考虑临界状态,负数带有符号,所以肯定不会是回文数。0肯定是个回文数,并且,当x最后一位是...原创 2020-03-21 01:00:57 · 127 阅读 · 0 评论 -
Leetcode-快乐数
题目描述题目分析阅读题干,知道了只有在数等于1时才返回true,在数进入循环时要返回false,所以第一反应是使用不能存入重复数字的HashSet来存储并判断是否已经出现过。经检验,在1-4之间只有1是快乐数,而在大于5的数中,则会回归到1或者回归到4。题目解答第一种:暴力解法使用HashSet存储每一轮循环的数字并判断是否进入循环,利用递归解决第二种:改进式暴力解法由...原创 2019-11-26 10:49:07 · 101 阅读 · 0 评论