leetcode算法刷题(五)——动态规划(三)
今天的题目不是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]
. 这个解法比较容易想出来。可是这个解法的时间复杂度有点高(O(n^2))。下面是另一种解法,利用了二分查找(O(logn)),时间复杂度是O(nlogn)
def maxlong(li):
maxLong = [0 for i in range(len(li))]
maxLong[0] = li[0]
leng = 1
for i in range(1,len(li)):
if li[i] > maxLong[leng-1]:
maxLong[leng] = li[i]
leng += 1
else:
pos = biSearch(li[i], leng, maxLong)
maxLong[pos] = li[i]
return leng
def biSearch(value, length, maxLong):
left = 0
right = length-1
while left <= right:
mid = (left+right)//2
if maxLong[mid] > value:
right = mid-1
elif maxLong[mid] < value:
left = mid+1
else:
return mid
return left
从左往右递增再递减的数列
题目的意思:从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的。
分析:这道题是上面那道题的变体。我们可以把这道题这样看:
筛除数字后,数组的0~i位是递增数列,数组的(len(li)-1)~i位是递增数列。
其实这道题等效于求出这两个数列的递增数列长度(a[i],b[i]),再求出min(len(li)-a[i]-b[i]+1)
该方法利用了前一道题求最长递增子序列长度的方法。
def maxlong(li):
maxLong = [0 for i in range(len(li))]
maxLong[0] = li[0]
leng = 1
for i in range(1,len(li)):
if li[i] > maxLong[leng-1]:
maxLong[leng] = li[i]
leng += 1
else:
pos = biSearch(maxLong, leng, li[i])
maxLong[pos] = li[i]
return leng
def biSearch(li, length, value):
left = 0
right = length-1
while left <= right:
mid = (right + left)//2
if li[mid] > value:
right = mid -1
elif li[mid] < value:
left = mid + 1
else:
return mid
return left
def mindelete(li):
a = [0 for i in range(len(li))]
b = [0 for i in range(len(li))]
c = 0
for i in range(len(li)):
li_a = li[:i+1]
a[i] = maxlong(li_a)
li_b = li[:i:-1]+[li[i]]
b[i] = maxlong(li_b)
for i in range(len(li)):
c = max(c, a[i]+b[i])
return len(li) -c +1
leetcode算法刷题(五)——动态规划(三)的更多相关文章
- leetcode算法刷题(二)——动态规划(一)
上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就 ...
- leetcode算法刷题(四)——动态规划(二)
又到了晚上,动态规划,开刷! 第121题 Best Time to Buy and Sell Stock 题目的意思:给予一个数组price,表示特定股票在某天的股价,里面第i个数表示第i天的价格.只 ...
- leetcode 算法刷题(一)
今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...
- leetcode算法刷题(三)
今天在刷了几道简单的动态规划后,又看了看string方面的题 第五题 Longest Palindromic Substring 题目的意思:求一个字符串的最长回文子串 分析:开始,我的想法是,现在字 ...
- Leetcode算法刷题:217和219题 Contains Duplicate
从题目名字就可以看出这两道题是相似的,219是217的加强版 217:Contains Duplicate 题目 给予一个数组,判断是否有重复的元素.如果有就返回True,没有就返回False.以下是 ...
- Leetcode算法刷题:第100题 Same Tree
Same Tree 题目 给予两棵二叉树,判断这两棵树是否相等(即各节点的值都一样) 解题思路 分别遍历两棵二叉树,并用列表分别存储这两棵树的节点的值,比较这两个列表就可以了 class Soluti ...
- Leetcode算法刷题:第14题 Longest Common Prefix
Longest Common Prefix 题目 给予一个列表,元素为字符串,写一个程序找出最长公共前缀 解题思路 先比较两个字符串,如果第一个字符不一样,则返回空值,比较完成后,用这个公共字符串和下 ...
- Leetcode算法刷题:第112题 Path Sum
Path Sum 题目 给予一个二叉树,和一个值su,寻找是否有一个从根节点到叶节点的和为su,有则返回True,没有为False.比如: 5 / \ 4 8 / / \ 11 13 4 / \ \ ...
- leetcode top-100-liked-questions刷题总结
一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回 ...
随机推荐
- js 数组排除重复值(string)
前提:数组中的元素类型为:string 在网上看了许多高大尚的文章,还是解决不了我的string arry 的问题,只能怪自己脑残了,上代码: <!DOCTYPE html> <ht ...
- Gradle方式构建Java多项目
0: 安装IDEA:Linux 上只需下载IDEA的包 并且将路径配置在PATH全局变量中./etc/profile export PATH=$PATH:/opt/Software/IDEA/idea ...
- js里面“===”与“==”的区别
首先,== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ==,不做类型转换,类型不同的一定不等. 下面分别说明: 先说 === ...
- SDK Manager 报错:Connection timed out: connect
安装Eclipse的安卓开发环境的时候,安装sdk时报错,出现: 解决办法: 1.选择左上角的Tools 2.选择Options,勾选下面红色框的东西 3. 4.重新重启一下sdk manager即可
- LINUX USB MASS STORAGE DRIVER流程图
- C指针
1,每行最大长度,处理的最大列号; preprocessor directives,preprocessor,预处理器读入源代码,根据预处理指令对其进行修改,把修改后 的源代码递交给编译器; 预处理器 ...
- 窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级
http://blog.chinaunix.net/uid-24227137-id-3595610.html 窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级 ...
- hdu 4740 The Donkey of Gui Zhou(dfs模拟好题)
Problem Description There was no donkey ,) , the down-right cell ,N-) and the cell below the up-left ...
- Web服务器压力测试一例
近期部门新上线一个服务,我们使用ab和locust分别测试 目前项目属于demo阶段,对访问量的支持不要求太高,我们暂且设定在500请求,20并发 工具介绍 ab ab全称为:Apache HTTP ...
- Win32K里的死循环
引用注明>> [作者:张佩][原文:www.YiiYee.cn/blog] 这是我到新公司后上手的第一个issue.一线project师找到我,说有一个urgent issue有没有兴趣看 ...