leetcode之买卖股票的最佳时机

第一次运用算法思维,u1s1性能还不是很好

  • 看到本题的第一想法是用类似冒牌排序的方法去寻找答案 但可惜超时了
    该如何改进?
    • 后面一想 在数学上可以把本题转化为求极差的问题 不过必须满足出现最大值的时间在最小值之前
    • 考虑到所有情况 答案可能在如下区间【最小值,最大值】【其前区间的最小值,最大值】【最小值,其后区间的最大值】【最大值,最小值 】
public:
    int maxProfit(vector<int>& prices) {
        int length = prices.size();
        int sub_max = 0, sub_min = 0;
        int max_flag = 0, min_flag = 10000;
        for (int it = 0; it < length; it++) {
            if (prices[it] > max_flag) {
                max_flag = prices[it];
                sub_max = it;
            }
            if (prices[it] < min_flag) {
                min_flag = prices[it];
                sub_min = it;
            }
        }
        if (sub_min < sub_max) return max_flag - min_flag;
        if (max_flag == min_flag) return 0;
        int maxAn1 = 0, maxAn2 = 0;
        for (int it = sub_min + 1; it < length; it++) {
            if (prices[it] - min_flag > maxAn1) maxAn1 = prices[it] - min_flag;
        }
        for (int it = sub_max - 1; it >= 0; it--) {
            if (max_flag - prices[it] > maxAn2) maxAn2 = max_flag - prices[it];
        }
        int maxAn = max(maxAn1, maxAn2);
        int record = 0;
        for (int site = sub_max + 1 ; site < sub_min - 1; site++) {
            for (int temp = site + 1; temp < sub_min ; temp++) {
                if (prices[temp] - prices[site] > record) record = prices[temp] - prices[site];
            }
        }
        return max(record, maxAn);
    }
};

---
更新一下 发现自己着实太蠢了之前🤣
其实真正重要的是什么呢?
==记录下该天之前的最低点 注意不断更新最低点与所求值即可==

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int min_flag = 1e5, maxAn = 0;
        for (int temp : prices) {
            if (temp - min_flag > maxAn) maxAn = temp - min_flag; 
            if (temp < min_flag) min_flag = temp;
        }
        return maxAn;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值