跟着姚桑学算法-股票的最大利润

简介: 剑指offer算法

题. 股票的最大利润

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖 一次 该股票可能获得的利润是多少?

例如一只股票在某些时间节点的价格为 [9,11,8,5,7,12,16,14]。

如果我们能在价格为 5 的时候买入并在价格为 16 时卖出,则能收获最大的利润 11。

数据范围

输入数组长度 [0,500]。

样例

输入:[9, 11, 8, 5, 7, 12, 16, 14]

输出:11

【题解】--- 遍历 & 贪心

由于只允许做一次股票买卖交易,枚举每一天作为卖出的日子,买入日子一定在卖出日子之前,为了获利最多,希望买入的日子的股票价格尽可能低。

用minnum[i]记录第0-i天的最低价格,则在第i天卖出的最大获利为nums[i]-minnum[i],枚举i找到最大获利。

贪心法:
由于只允许做一次股票买卖交易,枚举每一天作为卖出的日子,买入日子一定在卖出日子之前,为了获利最多,希望买入的日子的股票价格尽可能低。

复杂度分析:

时间复杂度为O(n)。

C++代码实现:

class Solution {
public:
    int maxDiff(vector<int>& nums) {
        if(nums.size()==0)
            return 0;
        vector<int>minnum(nums.size(),0);
        minnum[0] = nums[0];
        for(int i = 1; i<nums.size(); i++){
            if(nums[i]<minnum[i-1])
                minnum[i] = nums[i];
            else
                minnum[i] = minnum[i-1];
        }
        int res = 0;
        for(int i = 0;i<nums.size();i++){
            int delta = nums[i] - minnum[i];
            if(delta > res)
                res = delta;
        }
        return res;
    }
};

// 贪心法
class Solution {
public:
    int maxDiff(vector<int>& nums) {
        if(nums.size()==0) return 0;
        int buy=nums[0],diff=0;
        for(auto &x:nums){
            if(x<buy) buy=x;
            if(x-buy>diff) diff=x-buy;
        }
        return diff;
    }
};
目录
相关文章
|
算法
代码随想录Day27 贪心算法02 LeetCode T122 买卖股票的最佳时机II LeetCode T55 跳跃游戏 LeetCode T45 跳跃游戏II
代码随想录Day27 贪心算法02 LeetCode T122 买卖股票的最佳时机II LeetCode T55 跳跃游戏 LeetCode T45 跳跃游戏II
37 0
|
7月前
|
算法
算法编程(五):买卖股票的最佳时机
算法编程(五):买卖股票的最佳时机
49 0
|
7月前
|
算法 数据可视化 数据挖掘
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
|
7月前
|
机器学习/深度学习 自然语言处理 算法
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(下)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
|
7月前
|
机器学习/深度学习 算法 大数据
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(上)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
|
7月前
|
算法 Java 索引
[Java·算法·中等] LeetCode122. 买股票的最佳时机 II 解读
[Java·算法·中等] LeetCode122. 买股票的最佳时机 II 解读
49 0
|
7月前
|
存储 算法 JavaScript
JS算法-买卖股票的时机
JS算法-买卖股票的时机
|
7月前
|
算法 Java 索引
[Java·算法·中等] LeetCode122. 买股票的最佳时机 II 解读
[Java·算法·中等] LeetCode122. 买股票的最佳时机 II 解读
49 0
|
7月前
|
算法 Java
[Java·算法·简单] LeetCode121. 买股票的最佳时机 详细解读
[Java·算法·简单] LeetCode121. 买股票的最佳时机 详细解读
56 0
|
算法
代码随想录算法训练营第五十天 | LeetCode 309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费、股票系列总结
代码随想录算法训练营第五十天 | LeetCode 309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费、股票系列总结
79 1