1.自己的做法
class Solution { public int maxProfit(int[] prices) { int out=0; for(int i=1;i<prices.length;i++){ if(prices[i]>prices[i-1]){ out+=prices[i]-prices[i-1]; } } return out; } }我觉得这种做法,你只要明白一件事
举例 7,1,5,3,6,4
当你在3时,如果你3不大于5,就不会有收益
但如果是7,1,5,6 你在6的时候在1的时候买,在5和6的时候买等同于在1买了,在5卖了,又在5卖了,在6卖了,我都不知道自己再说啥了
我看了题解,觉得有一句话有助于理解,就是在同一天你可以进行买卖两次,那就把所有的差值加起来
2.dp动态规划
class Solution { public int maxProfit(int[] prices) { if(prices.length==0) return 0; int dp_i_0=0,dp_i_1=Integer.MIN_VALUE,temp; for(int i=0;i<prices.length;i++){ temp=dp_i_0; dp_i_0=Math.max(dp_i_0,dp_i_1+prices[i]); dp_i_1=Math.max(dp_i_1,temp-prices[i]); } return dp_i_0; } }
还是这个动态规划的题解
题解
当时看这个题解,k=+无穷时,有一点才开始没想明白,怎么k和k-1就一样了
后来想了想,当对k的次数不做限制时,你在做下一次买卖时,和之前进行了几次交易完全没有关系