算法总结 9.27

1.计算字符串相加 LeetCode415 

一位一位取出然后进行拼接

StringBuffer 用来操作字符串的拼接,拼接完成后进行 StringBuffer的reverse操作

2.最佳买卖股票的时机(几种题型总结)

2.1 LeetCode  121. 买卖股票的最佳时机

     首先定义两个变量

         buy (代表买当前该只股票花的钱)

         sell(代表卖出当前该支股票后赚的钱)

         然后对数组进行遍历只需要找出该只股票最便宜的时候将其赋值给buy  然后找出该只股票的  最高点然后计算 prices[i]-buy 赋给price即可

2.2LeetCode 122. 买卖股票的最佳时机 II

首先需要找出存在的状态

该题一共有两个状态

(1)当前持有股票  (状态0)

      <1>今天刚买了一只股票

      <2>昨天就有一只股票

  (2)  当前不持有股票  (状态1)

      <1>昨天就是没有股票

      <2>昨天有股票但是今天卖掉了

由此可得出状态转移公式

dp[i][0] = Math.max(dp[i-1][1]-prices[i],dp[i-1][0]);
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i]);

2.3 LeetCode 714. 买卖股票的最佳时机含手续费

该题和2.2题一样 只是需要再状态(2)卖出股票时 减去手续费

  // 今天卖完且交完手续费 跟买之前哪个多 
            sell =Math.max(sell,buy+prices[i]-fee);
//            前一天买的和今天买的哪个花的更少
            buy =Math.max(buy,sell-prices[i]);

2.4LeetCode 309. 最佳买卖股票时机含冷冻期

该题具有三个状态

(1)当前持有股票

      <1>昨天没有 今天刚买了一只股票

      <2>昨天就有股票

(2)当前处在冷静期  (昨天刚卖完股票)

(3)当前不处于冷静期 也不持有股票

      <1>刚过冷静期 今天啥也没买

      <2>昨天也没买 今天也没买

由此可以得出状态转移方程

 dp[i][0] = Math.max(dp[i-1][2]-prices[i],dp[i-1][0]);
 dp[i][1] = dp[i-1][0] + prices[i];
 dp[i][2] = Math.max(dp[i-1][2],dp[i-1][1]);

最后的最大值为三种状态下的最大值

Math.max(dp[n-1][0],dp[n-1][1],dp[n-1][2])

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值