题目:给定一个正整数数组,它的第 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);
}