CodeTop100 Day5

13、岛屿数量

岛屿为1,海水为0.判断一个二维数组中被海水包围的岛屿有多少

每次遍历数组遇到字符为1进行dfs(),结果计数就ok

简单dfs API实现,将该位置设置为0,然后递归上下左右,直到不为1,

14、买卖股票的最佳时机

看题解时候发现好多玄学方法,可能第一时间理解了,然后就忘了,我觉得还是按部就班的来吧

首先这是一道状态dp问题,定义好状态分析好状态转移方程就ok了

dp[i][k][j]:i代表第几天,k代表最大交易次数,j代表持有或者不持有的情况

分析初始值:dp[-1][...][0]=0这时候没开始且未持有股票,为0

dp[-1][...][1]=min..这时候不可能持票 为负无穷

dp[...][0][0]=0这时候没有交易且无股票为0,dp[..][0][1]=min 这时候不可能有股票为负无穷

分析转移方程:

dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+prices[i])

dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][0]-prices[i])

这个转移怎么理解呢,就是当天有股票是怎么转移的,没股票是怎么转移的,然后k的理解,转移时候最大k一定是从最大为k-1转移

最后输出dp[i][k][0];

15、全排列

[1 2 3]->[1 2  3].[2 1 3]....

经典回溯问题

这类题都有模板,定义回溯API,定义访问路径布尔类型数组,API里面返回条件是二维数组中的一维数组长度等于nums.length,就加入结果,每次遍历路径将该路径记录,然后遍历完该路径进行回退,remove,前一个路径结点清空,遍历完返回结果就ok了

这类题写多了就熟悉了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值