![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode题解
文章平均质量分 54
Dic0k
这个作者很懒,什么都没留下…
展开
-
Leetcode题解系列——Divide Two Integers(c++版)
题目链接:29. Divide Two Integers题目大意:给出两个int类型的除数与被除数,求出它们的商,但是不能使用乘法,除法,求模等方法。注意点: 1. int类型整数的范围,除法过程会出现越界的情况 2. 对于正数负数的处理 2. 除数为0的情况 3. 不能使用乘除法一. 第一想法不使用乘除法来计算除法的商,那就意味着我们只能使用加减法以及位运算。将除...原创 2018-09-09 15:15:19 · 541 阅读 · 0 评论 -
Leetcode题解系列——416. Partition Equal Subset Sum(c++版)
题目链接:416. Partition Equal Subset Sum题目大意:题目给出一个数组,分割成两个集合,判断这两个集合的和相等。一.算法设计这是一道经典的动态规划问题,判断子集合的和是否相等,由于集合的组成需要指数的构造时间,不符合题目要求的时间复杂度。这道算法题可以类比成背包问题。既然要划分成两个集合的和都相等,那么我们先算出这个集合的总和,这个sum必须为偶数,才能划分成功...原创 2018-12-03 18:53:05 · 175 阅读 · 0 评论 -
Leetcode题解系列——64. Minimum Path Sum(c++版)
题目链接:64. Minimum Path Sum题目大意:给出一个矩阵,现在想寻求一条从最左上元素到达最右下的最短路径,且只能向下走或者向右走两种途径。一.算法设计这也是一道典型的动态规划题目,我设计状态为sum[ i ][ j ] 表示为第i行第j列到达该点的最短长度。现在想求sum[row - 1][col -1]的值。状态转移方程:向右走: sum[i][j] = sum[i-...原创 2018-12-08 14:28:40 · 158 阅读 · 0 评论 -
Leetcode题解系列——322. Coin Change(c++版)
题目链接:322. Coin Change题目大意:给出硬币的面值以及所需要的总金额,试图找到最少个数的找钱方式,这里假设硬币的个数都是无限个。注意点:1.可能存在无法找零的情况,注意判断。2.注意动态规划数组的下标是从1开始还是从0开始一.算法设计这道也是典型的动态规划题目,不能使用贪心算法来解决。设置数组dp[i],表达找零总额为i的最少硬币总数。注意初始化给每一个金额先赋值为...原创 2018-11-26 22:27:14 · 487 阅读 · 0 评论 -
Leetcode题解系列——53. Maximum Subarray(c++版)
题目链接:53. Maximum Subarray题目大意:给出一段整数数组,找出其中一段总和最大的连续子段,输出最大值。注意点:子序列要求连续,不能中断判断给出数列长度为0的情况动态规划的起点,求解过程一.算法设计这是一道经典的动态规划问题,当然它可以通过数组遍历的方式来暴力求解,其时间复杂度为O(n2n^2n2),这显然不是我想要讨论的内容这里利用动态规划的方式来求解dp...原创 2018-11-19 20:13:09 · 146 阅读 · 0 评论 -
Leetcode题解系列——72. Edit Distance(c++版)
题目链接:Edit Distance题目大意:求解两个字符串的编辑距离。将一个字符串变为另一个字符串所需要进行的最小编辑动作,这里的编辑动作包括插入、删除、字符替换。一.算法设计这是一道经典的动态规划问题,两个字符串的对齐方式很多,如果要将所有的对齐方式都考虑一遍,算法的效率将十分低下。分解子问题的办法是看两个字符串的前缀,现令E[i,j]表示字符串x与字符串y的相应前缀的编辑距离,则E[n...原创 2018-11-12 13:44:06 · 271 阅读 · 0 评论 -
Leetcode题解系列——300. Longest Increasing Subsequence与673. Number of Longest Increasing Subsequenc(c++版)
题目链接:300.Longest Increasing Subsequence题目大意:最长增长子序列,这是一道经典的动态规划问题。要求输出一串数字的最长增长子序列的长度。增长子序列,要求nums[i] < nums[j], when i < j.注意点:使用动态规划时,序列长度初始的值为1还是0。注意判断数组长度为0的情况。一.算法设计这里有两种时间复杂度的解法。...原创 2018-11-05 13:06:16 · 221 阅读 · 0 评论 -
Leetcode题解系列——45. Jump Game II(c++版)
题目链接:45. Jump Game II题目大意:与之前的跳跃游戏一样,从下标0出发,查看是否能跳跃到数组的最后一个下标。数组的每个元素都是能跳跃的距离,现在要求输出跳跃到最后下标的最小步数。注意点:这次要求所给的数组都能到达最后下标,即无需考虑到达不了的情况不一定每次都走最大的距离,才能最快到达最后下标,故要改变之前的贪心策略注意判断数组只有一个元素的情况一.算法设计这次要在...原创 2018-10-29 12:35:37 · 510 阅读 · 0 评论 -
Leetcode题解系列——55. Jump Game(c++版)
题目链接:55. Jump Game题目大意:给出一个数组,数组中的元素为非负整数,是可跳跃的数量。从下标为0的数出发,查看是否能到达数组最后的下标(即数组元素数量减一)。注意点:下标是从0开始,而不是1.当到达下标大于数组元素数量减一,也说明可以到达最后一个下标一.算法设计这道题可以使用贪心算法,由于从零开始跳跃,可以找到许多种方法到达终点,但是这样的复杂度显然过高。于是使用贪心...原创 2018-10-22 22:51:13 · 372 阅读 · 0 评论 -
Leetcode题解系列——130. Surrounded Regions(c++版)
题目链接:130. Surrounded Regions题目大意:给出一个二维的图,由X和O两种字符构成。现在想要将符合条件的O变成X,条件为被X所包围,且没有连接的O处在四个边沿上。注意点:注意判断搜索时,会出现越界情况当传入图为空的处理情况visited数组的大小不够,出现数组越界情况一.算法设计显然,对于这个二维图的变化过程,我们可以用宽度搜索的算法来解决。我们从起点出发,...原创 2018-10-16 19:10:45 · 245 阅读 · 0 评论 -
Leetcode题解系列——Network Delay Time(c++版)
题目链接:743.Network Delay Time题目大意:给出一个有向带权图,从一个结点传播信息,需要多久时间使到所有结点都收到该信息。即找到一条从该结点到所有结点的一条最长的路径权重。注意点:题目给出的数据结构是边的集合,遍历的时候只能全部遍历一次。图可能无法找到一条通过所有结点的路径,因此要输出-1.注意将访问过的结点给赋值visited数组为1,不应继续访问。一.算法设...原创 2018-10-09 22:40:14 · 202 阅读 · 0 评论 -
Leetcode题解系列——Max Area of Island(c++版)
题目链接:695.Max Area of Island题目大意:给出一个n*m的01矩阵,在矩阵中找出连续1所占据的最大面积。连续指的是一个单位的上下左右必须有一个为1.注意点:矩阵不一定是方阵,在判断长度时候要注意长和宽。要注意搜索时候出现越界的情况,要判断坐标是否合理。利用深度搜索时候,可以不用visited数组来判断是否已经搜索,可以通过改变矩阵中的值来确定。一.算法设计显...原创 2018-10-07 10:12:01 · 156 阅读 · 0 评论 -
Leetcode题解系列——Reconstruct Itinerary(c++版)
题目链接:332. Reconstruct Itinerary题目大意:给出一个结点对的集合,结点对中为飞机的起飞点与降落点。要求根据飞机机票的信息来重新构造出旅途的线路,即遍历这个图。注意点:题目给出一定会存在一个解,即构造的图一定是连通的。这是一个有向图,要注意起始与结束地点与一般的深度搜索不同,这次我们不是要搜索结点的访问次序,而是搜索边的访问次序。这就意味着结点可以重复访问,而...原创 2018-09-25 20:54:25 · 201 阅读 · 0 评论 -
Leetcode题解系列——Count Complete Tree Nodes(c++版)
题目链接:222. Count Complete Tree Nodes题目大意:统计一棵完全二叉树的结点数注意点:完全二叉树的性质:叶子结点只可能在该二叉树最大的两层上出现,而且结点先放满左子树再放右子树。使用直接扫描结点方法来统计,时间复杂度过高,显然不适合。要根据完全二叉树的性质来设计算法。一.算法设计如何利用完全二叉树的性质来进行统计呢?我们可以利用完全二叉树的子...原创 2018-09-13 12:55:36 · 166 阅读 · 0 评论 -
Leetcode题解系列——Increasing Subsequences(c++版)
题目链接:491. Increasing Subsequences题目大意:给出一段序列,找出所有递增的子序列,且子序列的长度必须大于等于2.注意点:序列中可以有重复的元素,而且重复的元素也看作单独的元素,即可出现[3,7,7]这样的子序列。子序列集合中必须进行去重操作,即不能出现[ [3,7],[3,7] ]这样的答案。要利用深度搜索的算法来进行统计一.算法设计利用深度搜索算法...原创 2018-09-18 13:53:34 · 183 阅读 · 0 评论 -
Leetcode题解系列——264. Ugly Number II(c++版)
题目链接:264. Ugly Number II题目大意:输出第n个顺序的丑数,丑数的定义为一个数的质因子只能是2,3,5.例子:6是丑数,6 = 2 * 38是丑数,8 = 2 * 2 * 214不是丑数, 14 = 7 * 2. 包含了7一.算法设计由于判断一个数的时间复杂度并不高,但是判断一系列的数,那么这样的时间消耗是不行的。所以我们只需要判断一些丑数的顺序,这里利用到丑...原创 2018-12-11 19:22:33 · 211 阅读 · 0 评论