来自牛客网的一道题

题目:给定一个正整数数组,它的第 i 个元素是比特币第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一次),设计一个算法来计算你所能获取的最大利润。注意你不能在买入比特币前卖出。

题目非常简单,基本上看完就有思路了,但是具体转化为代码的时候就体现出来差距了……

https://www.nowcoder.com/test/question/done?tid=20171997&qid=285185#summary @悟道95

#include<bits/stdc++.h>
 
using namespace std;
 
  
 
intmain() {
 
    intn, mi = INT_MAX, maxProfit = 0;
 
    while(cin >> n) {
 
        maxProfit = max(n - mi, maxProfit);
 
        mi = min(n, mi);
 
    }
 
    cout << maxProfit;
 
    return0;
 
}

没有对比就没有伤害,以下是我的代码。。。不但代码更长,逻辑更乱,嵌套层数还贼多。。。

#include<stdio.h>
#include<vector>
using namespace std;
class Solution {
    public :
    int solve(vector<int> &nums) {
        if(nums.size() < 2) return 0;
        int min_all = nums[0];
        int max_now = nums[0];
        int d_max = 0;
        int d_now = 0;
        for(int i=1; i<nums.size(); i++) {
            int n = nums[i];
            if(n < min_all) {
                max_now = min_all = n;
                d_now = 0;
            } else if(n > max_now) {
                d_now += n-max_now;
                max_now = n;
                if(d_now > d_max) {d_max = d_now;}
            } else {
                 
            }
        }
        return d_max;
    }
};
 
int main(void) {
    vector<int> nums;
    int n;
    while(scanf("%d", &n) == 1) {
        nums.push_back(n);
    }
    int result = Solution().solve(nums);
    printf("%d", result);
}
发布了11 篇原创文章 · 获赞 8 · 访问量 8855

猜你喜欢

转载自blog.csdn.net/qq_26946497/article/details/84501287