博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode【dynamic】【0】
阅读量:5022 次
发布时间:2019-06-12

本文共 1217 字,大约阅读时间需要 4 分钟。


 使用golang进行阶梯,如果[]int是nil,那么range下来是直接跳过的,所以可以返回[]int{nil},这样可以少了很多逻辑判断。

 , 


 这两个都是比较常规的找出子项就行,动态规划中由低向上。


 这道丑数,要看到每次都次寻找最小的,新生成的可判断的数字,是由已生成的数字乘上235得到的,所以维护三个索引就可以,可以定位每一个应该寻找的最小的数。


 这道一开始想法动态规划从上往下,其实是错的,目前做过的都是从下往上,不要以为做的都是无用功,其实这种解法才是比较合适的。还少了记录相关的值。


 两种方法

n^2的解法还是比较常规的,从低开始往上,每一个index都要遍历[0,index-1]中所有可能,因为该范围中最好结果是最长的加上1,最差是最长结果,中间结果是次差的加上一。

nlogn的解法细节看

后者用到了Arrays.binarySearch(int[] nums.int fromIndex,int toIndex,int target),其中toIndex依旧表示未算入的边界,但是可以容纳from=to=0这种情况。得到的结果如果找得到返回原数组的index从0开始的索引,如果找不到返回应该所处的位置从1开始的索引。


同上类似


解法比较简单,就是存储所有【0,i】的和


在初始化阶段和计算阶段都可以使用动态原理,再优化方案可以减少ifelse的判断次数。


 

个人想法还是传统解法,从底开始,【i,end】表示从i开始到结束时的最大利润,i-1天计算,如果选择buy,那么遍历后面所有卖的情况加上卖的那天往后推两天的利润,如果不选择buy,那么就是i开始到结束的利润。所以从后往前算起。这样时间复杂度是n^2

最优解是时间复杂度为n,空间复杂度为1 。

前继状态其实可以有多种,这道题我们看到每天决策的时候根据前一天有关,前一天共有三种情况分别是买,卖,保留,那么下一天可根据这三种情况作出决策。

最优解和我的想法影响因素在于,我总是先决策,然后根据我的决策再去寻找往后的适应我决策应该有的需求。比如这道题正向决策,如果我选择买,那我就需要过两天后的dp最优利润。如果我选择保留,我需要过一天的dp最优利润。 我卖的决策取决于我先买然后遍历所有可能卖的情况。

那么最优解呢,先让它自动决策,比如我在处理第i天,那么i-1天有什么情况,可能是买卖保留,那么从而让i-1影响我决策,处理第i天也就只有这三种情况。所以思考问题有别的思路就是后决策。

其实包括前两天写的最长子递增序列,让问题先走,找到第一组递增序列,接下来我该怎么处理,如何利用第一组进行决策就能得出最优解。


这道题很简单,第一眼看到是accepted率很低,没想到最后直到成功我发现我拉低了这个概率,考虑的不够仔细,状态机里面状态还是比较多的。

 

转载于:https://www.cnblogs.com/GrimReaper/p/9256682.html

你可能感兴趣的文章
括号序列(栈)
查看>>
一件趣事
查看>>
DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
查看>>
atom 调用g++编译cpp文件
查看>>
H3C HDLC协议特点
查看>>
iptables 网址转译 (Network address translation,NAT)
查看>>
ios __block typeof 编译错误解决
查看>>
android 插件形式运行未安装apk
查看>>
ios开发之 manage the concurrency with NSOperation
查看>>
Android权限 uses-permission
查看>>
NSEnumerator用法小结
查看>>
vim如何配置go语言环境
查看>>
机器学习好网站
查看>>
python 中的 sys , os 模块用法总结
查看>>
解题:国家集训队 Middle
查看>>
响应者链
查看>>
指针从函数内部带回返回值
查看>>
在使用webView播放flash或视频文件时无法关闭声音的问题
查看>>
redhat 7 源码安装 mysql5.5.49
查看>>
CCP浅谈
查看>>