摘要:
126. Word Ladder II 题意:从给定的字符串数组中,选择从起始字符串到终点字符串的路径。 回朔 TLE class Solution(object): def findLadders(self, beginWord, endWord, wordList): """ :type beg 阅读全文
摘要:
128. Longest Consecutive Sequence 题意:给定一个未排序的数组,计算数组中的数字构成连续的最大个数。 动态规划 假定dp[i]表示从开始到当前位置的最长连续个数。 分析:如果遇见下一位比当前值要大1的值,则个数加一,如果是相等,则继续使用之前的值,如果都不符合,则重置 阅读全文
摘要:
90. 子集 II 题意 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 解题思路 因为加进了重复元素,那么就有可能出现重复的子集,需要在加入到结果之前进行判断是否存在(首先要进行排序,保证每个子集都是有序的),使用的思路和1 阅读全文
摘要:
78. 子集 题意 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 解题思路 回溯:每一次递归都把当前的路径数组加入到最终的结果中,同时维护一个index,将index的值加入到当前路径数组中,将index+1往后递归; 迭代实现 阅读全文
摘要:
4. 寻找两个有序数组的中位数 题意 给定两个拍好序的数组,求两个数组合并后的中位数。 解题思路 归并排序:将多个需要排序的数组合并成最终的数组,然后求中位数,那么它的时间复杂度则为(n+m)log(n+m)*,而题目的要求是log(n+m),可以看出应该是使用二分法来查找,较小的一方会直接丢弃掉; 阅读全文
摘要:
152. Maximum Product Subarray 前提:一开始没有想到DP,而是想到了用递归,为了要考虑到可能会出现多个负数,基本上是遍历每一种情况,很是复杂。 假定dp[i]表示从起始到该下标的乘积的最值。 思路:我们需要使用两个dp,一个纪录最小值,一个纪录最大值,相互利用更新得到最小 阅读全文
摘要:
74. Search a 2D Matrix 题意:从二维数组中找到给定的目标值。 分析:需要注意的是,如果当前数比目标数要小,不能够意味着搜索的范围要从当前数的行和列数目开始,因为目标值有可能会在下一个行的左边列,题目中并没有要求当前行的最后一个数要比下一行的第一个数要小,所以你只能确定目标数在当 阅读全文
摘要:
64. Minimum Path Sum 题意:计算从起始结点到终点结点的路径之和,使其相对最小。 假定dp[i][j]表示到达该位置的最小的和 分析:如果在第一行或者第一列,因为没有别的路可以选择,所以其和没有最小只说,只能进行累加;而其它的情况则可以通过上一个结点和左边一个结点的比较取其相对较小 阅读全文
摘要:
63. Unique Paths II 分析:在原来I的基础之上加上了障碍物,所以只需要碰见障碍物就将该路径置为0,如果是第一行或者第一列存在障碍物,那么在障碍物之后的数就都为0,因为根本不可能到达。 状态转移方程为: 动态规划 class Solution(object): def uniqueP 阅读全文
摘要:
62. Unique Paths 题意:计算从起点到终点有多少中可能的路径(只能走右边和下边)。 首先是分析状态转移方程,假定dp[i][j]表示到达该位置路径的个数。 分析如下:在第一行和第一列的表格中,因为其只能走固定的右边和下边,则其该行和该列上的值都只有一种走法,所以其值都为1,接下来看其它 阅读全文
摘要:
54. Spiral Matrix 题意:螺旋打印二维矩阵 1. 正常做法 直接按照螺旋的思想一个个打印出来。 class Solution(object): def spiralOrder(self, matrix): """ :type matrix: List[List[int]] :rtyp 阅读全文