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;
    }
    
  • 相关阅读:
    监控kubernetes集群的方式
    Prometheus的集群与高可用
    Grafana简单用法
    Prometheus实战之配置汇总
    Leetcode Surrounded Regions
    leetcode Spiral Matrix II
    leetcode Regular Expression Matching
    leetcode Set Matrix Zeroes
    leetcode 较难题II
    Leetcode 数独
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13584538.html
Copyright © 2011-2022 走看看