【学习笔记】LeetCode练习-动态规划
LeetCode练习-动态规划
- 主要思想
- 练习题
主要思想
动态规划是求解决策过程最优化的过程,往往用于优化递归问题,以减少计算量。一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。
练习题
300.最长上升子序列
题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
【【学习笔记】LeetCode练习-动态规划】代码:
def lengthOfLIS(nums):
if not nums:return 0
dp=[1]*len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[i]>nums[j]:
dp[i]=max(dp[i],dp[j]+1)
return max(dp)
print(lengthOfLIS([10,9,2,5,3,7,101,18]))
5. 最长回文子串
题目:给定一个字符串 s,找到 s 中最长的回文子串。可假设 s 的最大长度为 1000。
示例 :
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
代码:
def longestPalindrome(s):
length=len(s)
if length<2:#判断边界条件
return s
dp=[[False for _ in range(length)]for _ in range(length)] #定义dp状态矩阵
max_len=1
start=0 #后续记录回文串初试位置
for j in range(1,length):
for i in range(j):
#矩阵中逐个遍历
if s[i]==s[j]:
if j-i<3:
dp[i][j]=True
else:
dp[i][j]=dp[i+1][j-1]
if dp[i][j]: #记录位置,返回有效答案
cur_len=j-i+1
if cur_len>max_len:
max_len=cur_len
start=i
return s[start:start+max_len]
print(longestPalindrome("babad"))
(TBD)
推荐阅读
- 宽容谁
- 我要做大厨
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘