i007.cc

i007.cc

优先队列-降维打击

最佳交易

知道每日金价,希望从中找出两个交易日,在第一个交易日买进,第二个交易日卖出,能实现利润最大化。

 

#include "pch.h"
#include <iostream>
#include <vector>
#include <time.h>

const size_t INVALID_POS = -1;

std::pair<size_t, size_t> GetTradePos(const std::vector<int>& prices) {
    if (prices.size() < 2) {
        //个数小于2,找不出买卖点
        return std::make_pair(INVALID_POS, INVALID_POS);
    }
    else if (prices.size() == 2) {
        if (prices[0] >= prices[1]) {
            //没有利润,找不出买卖点
            return std::make_pair(INVALID_POS, INVALID_POS);
        }
        else {
            return std::make_pair(0, 1);
        }
    }

    int max_gain = 0;
    int buy_pos = INVALID_POS;
    int sell_pos = INVALID_POS;
    for (int i = 0; i < prices.size() - 1; i++) {
        for (int j = i + 1; j < prices.size(); j++) {
            if (prices[j] - prices[i] > max_gain) {
                max_gain = prices[j] - prices[i];
                buy_pos = i;
                sell_pos = j;
            }
        }
    }

    return std::make_pair(buy_pos, sell_pos);
}

int main()
{
    std::vector<int> prices;
    srand(time(nullptr));

    for (int i = 0; i < 50; i++) {
        int rand_num = rand();
        prices.push_back(rand_num);
    }

    auto ret = GetTradePos(prices);
    return 0;
}

 

发表回复