美文网首页
121. 买卖股票的最佳时机

121. 买卖股票的最佳时机

作者: 水中的蓝天 | 来源:发表于2022-07-29 09:48 被阅读0次

121. 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

示例:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

提示
1 <= prices.length <= 105
0 <= prices[i] <= 104

思路:股票价格是波动的,需要拿到一天的价格跟其前面所有价格做对比得出最大利润;还需要通过对比拿到最小股价,这天就是最好的买入价格
总结:利用动态规划思想解决问题,原理就是当前价跟前面的价格对比 倒推出最优方案的过程

方案一



class Solution {
    /**
     思路:
     股票价格是波动的,需要拿到当天价格跟前面的所有价格做对比得出最大利润
     最大利润必要条件就是买入价格越小越好,最小的那个就是买入的价格
     然后在价格最大时卖出
     总结:利用动态规划思想解决问题,原理就是当前价跟前面的价格对比 倒推出最优方案的过程
     */
    public int maxProfit(int[] prices) {
         
         //0.边界判断
         if(prices==null||prices.length==0) return 0;

         //1.定义求解需要的数据结构
         int minPrice = prices[0];//最小买入价
         int maxProfit = 0;//最大获利 

         //2.通过扫描一遍数组得出最大利润
        for(int i = 0; i < prices.length;i++) {
            if(prices[i]<minPrice) {
                //当前价格比最小价还小,更新最小价
                minPrice = prices[i];
            }else {//大于最小价可以获利
                //对比这次获利 跟 最大获利那个大
                maxProfit = Math.max(prices[i]-minPrice,maxProfit);
            }
        }

         //3.返回结果
         return maxProfit;

    }
}


方案二:动态规划 即求最大连续子序列和 ,因为第i天买,第j天卖的利润就是第i~j天内 所有相邻两天股票的差之和

相关文章

网友评论

      本文标题:121. 买卖股票的最佳时机

      本文链接:https://www.haomeiwen.com/subject/oastirtx.html