zoukankan      html  css  js  c++  java
  • 第121题:买卖股票的最佳时机

    一. 问题描述

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

    如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    注意你不能在买入股票前卖出股票。

    示例 1:

    输入: [7,1,5,3,6,4]

    输出: 5

    解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

         注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

    示例 2:

    输入: [7,6,4,3,1]

    输出: 0

    解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

    二. 解题思路

    本体思路:采用动态规划的算法进行求解。找到状态转移函数。N为第n行到最后一行的最大值,i为某一行第i个数。其中Max(n)代表前n天利润最大差,g(n)表示第n天的股票价格,f(n)代表前n天股票最低价格值。

    Max(n)=Max(Max(n-1),g(n)-f(n-1))

    步骤一:根据状态转移方程,我们可以从第一天进行算起,与最低股票价格进行判断,得到利润值,如果利润值大于temp,则temp等于最大利润值,否则接着往后进行判断,直到遍历结束。

    三. 执行结果

    执行用时 :1 ms, 在所有 java 提交中击败了99.97%的用户

    内存消耗 :37.1 MB, 在所有 java 提交中击败了85.51%的用户

    四. Java代码

    class Solution {
        public int maxProfit(int[] prices) {
             if(prices.length==0||prices==null){
                 return 0;
             }
            int min=prices[0];
            int max=prices[0];
            int temp=0;
            for(int i=0;i<prices.length;i++) {
                if(prices[i]<min) {
                    min=prices[i];
                    max=prices[i];
                }else if(prices[i]>max) {
                    max=prices[i];
                    temp=Math.max(temp, max-min);
                }
            }
            return temp;
        }
    }
  • 相关阅读:
    java生成4个不同的随机数
    前端学习(三十二)正则(笔记)
    前端学习(三十一)canvas(笔记)
    前端学习(三十)es6的一些问题(笔记)
    前端学习(二十九)nodejs(笔记)
    前端学习(二十八)es6&ajax(笔记)
    前端学习(二十七)存储&es6(笔记)
    前端学习(二十七)自动构造工具交互(笔记)
    前端学习(二十六)移动端s(笔记)
    前端学习(二十四)一些总结(笔记)
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11887791.html
Copyright © 2011-2022 走看看