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