随笔分类 -  AL_Array

摘要:47. 全排列 II 题意 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 解题思路 去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。用编程的话描述就是第i个数与第j个数交换时,要求[i,j)中没有与第j个数相等的数。有两种方法(1)可以每次在需要交换时进行顺序 阅读全文
posted @ 2019-04-08 17:17 banananana 阅读(454) 评论(0) 推荐(0) 编辑
摘要:674. 最长连续递增序列 题意 给定一个未经排序的整数数组,找到最长且连续的的递增序列。 解题思路 从下标1的位置开始和前面的值进行比较,如果大于前面一个值,增加1,否则重置为1(因为肯定至少有1个); 从下标1的位置开始和前面的值进行比较,如果大于前面一个值,增加1,否则重置为1(因为肯定至少有 阅读全文
posted @ 2019-04-03 15:06 banananana 阅读(242) 评论(0) 推荐(0) 编辑
摘要:[LeetCode]495. Teemo Attacking 时隔多日,又要开始继续重拾算法了; 题目:这道题目是一个披着游戏皮的数组题目,计算提莫总共攻击时长。 分为三种情况: 如果当前攻击时间点加上duration后超过了下一个时间点,那个显然下一个时间点就不用计算了,直到找到数组中没有超过的时 阅读全文
posted @ 2018-05-01 15:48 banananana 阅读(289) 评论(0) 推荐(0) 编辑
摘要:Range Sum Query 2D - Immutable 二维数组范围和 题意 在二维数组中求范围的和,需要注意的是: 解法 根据要求,可能会调用很多次的求和函数,设想如果范围比较大,那么简单的每次调用都要计算每行的和再累加显然是不符合题目的要求,因为题目说了矩阵是不可变的,因此我们可以使用动态 阅读全文
posted @ 2017-10-08 09:11 banananana 阅读(235) 评论(0) 推荐(0) 编辑
摘要:300. 最长上升子序列 题意 给定一个无序的整数数组,找到其中最长上升子序列的长度。 解题思路 动态规划:看到这种题目首先想到的就是dp,受到之前最长回文子串的影响,也以为是要用二维数组来解,然后用(i,j)记录区间的最长值,后来发现完全没有必要。假设dp[i]表示0到i中的最长序列长度,如果之前 阅读全文
posted @ 2017-09-06 16:22 banananana 阅读(155) 评论(0) 推荐(0) 编辑
摘要:[LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k 因为题目要求使用O(n)的复杂度,那么之前在min中O(nlogn)做法就不行了。 我们可以使用字典来保存前面的数的和,然后在遍历的时候检查当前和与目标值之差是否存在,如果存在则说明构成一 阅读全文
posted @ 2017-09-02 21:21 banananana 阅读(97) 评论(0) 推荐(0) 编辑
摘要:122. Best Time to Buy and Sell Stock II 题意:计算买入和卖出的最大收益,和1的区别在于,它可以进行多次交易,不过在买入新的之前需要把之前买入的给卖掉。 贪心算法 既然可以买卖多次,那么就不用维护一个数组去纪录最小值了,只要当天比前一天的收益要高,就卖出。 cl 阅读全文
posted @ 2017-08-29 03:42 banananana 阅读(135) 评论(0) 推荐(0) 编辑
摘要:121. Best Time to Buy and Sell Stock 题意:寻找合适的买入和卖出的时机,找出最大价值。注意的是,买入必须在卖出之前。 动态规划 用动态规划来找最小的价值,然后维护一个变量来找最大价值差。 状态转移方程为: class Solution(object): def m 阅读全文
posted @ 2017-08-29 03:23 banananana 阅读(97) 评论(0) 推荐(0) 编辑
摘要:125. Valid Palindrome 只要字母和数字,再判断是否是回文即可。 class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ if not s: return True s 阅读全文
posted @ 2017-08-24 01:36 banananana 阅读(75) 评论(0) 推荐(0) 编辑
摘要:53. Maximum Subarray 题意:计算最大的连续子数组之和 动态规划 dp[i]表示为从当前下标i开始的最大子数组之和。 class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rt 阅读全文
posted @ 2017-08-23 12:17 banananana 阅读(83) 评论(0) 推荐(0) 编辑
摘要:126. Word Ladder II 题意:从给定的字符串数组中,选择从起始字符串到终点字符串的路径。 回朔 TLE class Solution(object): def findLadders(self, beginWord, endWord, wordList): """ :type beg 阅读全文
posted @ 2017-08-20 17:42 banananana 阅读(197) 评论(0) 推荐(0) 编辑
摘要:128. Longest Consecutive Sequence 题意:给定一个未排序的数组,计算数组中的数字构成连续的最大个数。 动态规划 假定dp[i]表示从开始到当前位置的最长连续个数。 分析:如果遇见下一位比当前值要大1的值,则个数加一,如果是相等,则继续使用之前的值,如果都不符合,则重置 阅读全文
posted @ 2017-08-20 15:06 banananana 阅读(103) 评论(0) 推荐(0) 编辑
摘要:90. 子集 II 题意 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 解题思路 因为加进了重复元素,那么就有可能出现重复的子集,需要在加入到结果之前进行判断是否存在(首先要进行排序,保证每个子集都是有序的),使用的思路和1 阅读全文
posted @ 2017-08-20 14:25 banananana 阅读(127) 评论(0) 推荐(0) 编辑
摘要:78. 子集 题意 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 解题思路 回溯:每一次递归都把当前的路径数组加入到最终的结果中,同时维护一个index,将index的值加入到当前路径数组中,将index+1往后递归; 迭代实现 阅读全文
posted @ 2017-08-20 13:49 banananana 阅读(120) 评论(0) 推荐(0) 编辑
摘要:4. 寻找两个有序数组的中位数 题意 给定两个拍好序的数组,求两个数组合并后的中位数。 解题思路 归并排序:将多个需要排序的数组合并成最终的数组,然后求中位数,那么它的时间复杂度则为(n+m)log(n+m)*,而题目的要求是log(n+m),可以看出应该是使用二分法来查找,较小的一方会直接丢弃掉; 阅读全文
posted @ 2017-08-20 12:19 banananana 阅读(138) 评论(0) 推荐(0) 编辑
摘要:152. Maximum Product Subarray 前提:一开始没有想到DP,而是想到了用递归,为了要考虑到可能会出现多个负数,基本上是遍历每一种情况,很是复杂。 假定dp[i]表示从起始到该下标的乘积的最值。 思路:我们需要使用两个dp,一个纪录最小值,一个纪录最大值,相互利用更新得到最小 阅读全文
posted @ 2017-08-20 04:57 banananana 阅读(145) 评论(0) 推荐(0) 编辑
摘要:74. Search a 2D Matrix 题意:从二维数组中找到给定的目标值。 分析:需要注意的是,如果当前数比目标数要小,不能够意味着搜索的范围要从当前数的行和列数目开始,因为目标值有可能会在下一个行的左边列,题目中并没有要求当前行的最后一个数要比下一行的第一个数要小,所以你只能确定目标数在当 阅读全文
posted @ 2017-08-20 03:46 banananana 阅读(152) 评论(0) 推荐(0) 编辑
摘要:64. Minimum Path Sum 题意:计算从起始结点到终点结点的路径之和,使其相对最小。 假定dp[i][j]表示到达该位置的最小的和 分析:如果在第一行或者第一列,因为没有别的路可以选择,所以其和没有最小只说,只能进行累加;而其它的情况则可以通过上一个结点和左边一个结点的比较取其相对较小 阅读全文
posted @ 2017-08-20 02:59 banananana 阅读(106) 评论(0) 推荐(0) 编辑
摘要:63. Unique Paths II 分析:在原来I的基础之上加上了障碍物,所以只需要碰见障碍物就将该路径置为0,如果是第一行或者第一列存在障碍物,那么在障碍物之后的数就都为0,因为根本不可能到达。 状态转移方程为: 动态规划 class Solution(object): def uniqueP 阅读全文
posted @ 2017-08-20 02:28 banananana 阅读(132) 评论(0) 推荐(0) 编辑
摘要:62. Unique Paths 题意:计算从起点到终点有多少中可能的路径(只能走右边和下边)。 首先是分析状态转移方程,假定dp[i][j]表示到达该位置路径的个数。 分析如下:在第一行和第一列的表格中,因为其只能走固定的右边和下边,则其该行和该列上的值都只有一种走法,所以其值都为1,接下来看其它 阅读全文
posted @ 2017-08-20 01:45 banananana 阅读(95) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示