來自牛客網的一道題

題目:給定一個正整數數組,它的第 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);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章