今天的题目不是leetcode上面的.只是觉得动态规划还是不算很熟练,就接着找了点DP的题练练 最长递增子序列的长度 题目的意思:传入一个数组,要求出它的最长递增子序列的长度.例如:如在序列1,-1,2,-3,4,-5,6,-7中,最长递增序列为1,2,4,6,所以长度为4. 分析:这道题我们可以用动态规划来做.对于数组的前i个元素,记L(i)为前i个最长递增子序列的长度.我们可以得到状态转移方程:L(i) = max(L(j))+1, 其中j<i, a[j]<a[i]. 这个解法比较容易想出…
上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就当重新学习吧~ 第198题 House Robber 题目的意思:一个抢劫者要抢劫一条街上的住户,由于每家都有报警器,连续抢劫2家就会触发报警器.现在给你一个列表,里面的元素是每家可抢劫的金额,要求在不触发报警器的情况下抢劫最多的钱 分析:这是一道典型的动态规划题,我们先分析一下. 对于每一家,抢劫…
又到了晚上,动态规划,开刷! 第121题 Best Time to Buy and Sell Stock 题目的意思:给予一个数组price,表示特定股票在某天的股价,里面第i个数表示第i天的价格.只能交易一次(买一次+卖一次),求最大利润 分析:典型的动态规划.当我们要求到第i天为止最大的利润,就需要知道i-1天为止的最大利润,然后用第i天的股价减去(i-1)天股票最低值,然后比较即可.所以我们可以推出状态转移方程: maxProfit(i) = max(maxProfit(i-1), pri…
今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字,相加后返回倒序的链表.比如: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 (342 + 465 = 807) 我的解法: 思路很简单,把两个链表分别转换成数字,相加后把结果再转换成链表 # Definit…
今天在刷了几道简单的动态规划后,又看了看string方面的题 第五题 Longest Palindromic Substring 题目的意思:求一个字符串的最长回文子串 分析:开始,我的想法是,现在字符串中插入特殊字符,比如'$',这样可以规避回 文串长度为奇数或偶数的讨论问题,加入特殊字符后,长度始终为奇数.然后建立一个数组,该数组记录了以每一位为中心的回文字符串的长度.解法很简单: def findmin(s): s_ = '~' + '~'.join(s) + '~' st = '' p…
从题目名字就可以看出这两道题是相似的,219是217的加强版 217:Contains Duplicate 题目 给予一个数组,判断是否有重复的元素.如果有就返回True,没有就返回False.以下是我第一次想到的方法 解题思路 遍历这个数组,建立一个字典,存储每个不同的数字的出现次数.如果某个元素的出现次数大于1,则表示有重复 class Solution: # @param {integer[]} nums # @return {boolean} def containsDuplicate(…
Same Tree 题目 给予两棵二叉树,判断这两棵树是否相等(即各节点的值都一样) 解题思路 分别遍历两棵二叉树,并用列表分别存储这两棵树的节点的值,比较这两个列表就可以了 class Solution: # @param {TreeNode} p # @param {TreeNode} q # @return {boolean} def isSameTree(self, p, q): if (not p) and (not q): return True if (not p) and q:…
Longest Common Prefix 题目 给予一个列表,元素为字符串,写一个程序找出最长公共前缀 解题思路 先比较两个字符串,如果第一个字符不一样,则返回空值,比较完成后,用这个公共字符串和下一个元素继续比较,以此类推 class Solution: # @param {string[]} strs # @return {string} def longestCommonPrefix(self, strs): if not strs: return '' if len(strs) ==…
Path Sum 题目 给予一个二叉树,和一个值su,寻找是否有一个从根节点到叶节点的和为su,有则返回True,没有为False.比如: 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1 hasPathSum(self, root, 22) 将返回True 节点为: class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None 解题思路 class Soluti…
一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回头看第一篇文章,还算有一些收获的. 传送门: 从心出发-刷leetcode写给5年后的自己,原计划用3个月的时间,回头来看第1轮100题用了刚好30天. 二.刷题方法及做法 自2020年1月22日开始,到2020年2月21日至,刷了top-100-liked-questions中的100道题目.普遍…