LeetCode 122 买卖股票的最佳时机||

    科技2022-08-09  91

    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的次数不做限制时,你在做下一次买卖时,和之前进行了几次交易完全没有关系

    Processed: 0.012, SQL: 8