zoukankan      html  css  js  c++  java
  • 面试题63:股票的最大利润

    1 题目描述

      假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们在价格为5的时候买入,在价格为16的时候卖出,则能收获最大的利润11。

    2 输入

    数组,代表股票一段时间的价格

    3 输出

    最大利润

    4 样例输入

    {9,11,8,5,7,12,16,14}
    

    5 样例输出

    11
    

    6 求解思路

      动态规划,设置(diff(i))代表当卖出价格为第i个数字的时候能获得的最大利润,则(diff(i)=num[i]-min),其中min表示前(i-1)个数字中最小的值。

    7 C++版本代码如下

    int maxDiff(int numbers[], int length){
        if(length < 2)
            return 0;
    
        vector<int> diff(length, -1);
        int min = numbers[0];
        diff[1] = numbers[1] - min;
        for(int i = 2; i < length; i++){
            if(numbers[i- 1] < min)
                min = numbers[i- 1];
            diff[i] = numbers[i] - min;
        }
        int maxFee = -999;
        for(int i = 1; i < length; i++)
            if(diff[i] > maxFee)
                maxFee = diff[i];
        return maxFee;
    }
    
    更加精简的版本:
    int maxDiffPlus(int numbers[], int length){
        if(length < 2)
            return 0;
    
        int min = numbers[0];
        int maxDiff = numbers[1] - min;
        for(int i = 2; i < length; i++){
            if(numbers[i - 1] < min)
                min = numbers[i - 1];
            int currentDiff = numbers[i] - min;
            if(currentDiff > maxDiff)
                maxDiff = currentDiff;
        }
        return maxDiff;
    }
    
  • 相关阅读:
    Linux安装gitlab
    logback日志配置
    spring源码-aop动态代理-5.3
    【转】阿里云免费SSL证书申请与安装使用(IIS7)
    WebApi 全局使用filter
    Mint-UI Picker 三级联动
    P标签莫名有了margin-top值的原因
    Vue为v-html中标签添加CSS样式
    【转】C# string数组转int数组
    【转】SQLServer汉字转全拼音函数
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13584538.html
Copyright © 2011-2022 走看看