DP30. 买卖股票的最好时机(一)
描述
输入描述
输出描述
输出只买卖一次的最高收益示例1
输入:
7 8 9 2 5 4 7 1
输出:
5
说明:
在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。示例2
输入:
3 2 4 1
输出:
2
示例3
输入:
3 3 2 1
输出:
0
C++ 解法, 执行用时: 13ms, 内存消耗: 416KB, 提交时间: 2022-02-17
#include<iostream> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int Max = 0,n,arr,In; cin >> n>>In; for (int i = 1; i < n; i++) { cin>>arr; In = min(In, arr); Max = max(Max,arr-In); } cout << Max << endl; return 0; }
C++ 解法, 执行用时: 13ms, 内存消耗: 432KB, 提交时间: 2022-04-22
#include<iostream> using namespace std; const int MAXN = 1e5+5; int n, val; int main(){ ios::sync_with_stdio(false); cin >> n; int ans = 0, mmin = 0x7fffffff; while(n--){ cin >> val; mmin = min(mmin, val); ans = max(val - mmin, ans); } cout << ans; return 0; }
C++ 解法, 执行用时: 13ms, 内存消耗: 444KB, 提交时间: 2022-08-05
#include<iostream> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int Max = 0,n,arr,In; cin >> n>>In; for (int i = 1; i < n; i++) { cin>>arr; In = min(In, arr);//最小数 Max = max(Max,arr-In);//最大值 } cout << Max << endl; return 0; }
C++ 解法, 执行用时: 13ms, 内存消耗: 468KB, 提交时间: 2022-07-29
// #include <iostream> // #include <vector> // using namespace std; // int main(){ // int n; // cin>>n; // vector<int> num(n); // for(int i=0;i<n;i++) cin>>num[i]; // vector<vector<int>> dp(n,vector<int>(2,0)); // dp[0][0]=0;dp[0][1]=-num[0];//0不持有 // for(int i=1;i<n;i++){ // dp[i][0]=max(dp[i-1][1]+num[i],dp[i-1][0]); // dp[i][1]=max(dp[i-1][1],-num[i]); // } // cout<<dp[n-1][0]; // //暴力 // // vector<int> dp(n,0);//第i天卖出的收益 // // int res=0; // // for(int i=1;i<n;i++){ // // for(int j=0;j<i;j++){ // // dp[i]=max(dp[i],num[i]-num[j]); // // } // // res=max(res,dp[i]); // // } // // cout<<res; // return 0; // } #include<iostream> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int Max = 0,n,arr,In; cin >> n>>In; for (int i = 1; i < n; i++) { cin>>arr; In = min(In, arr); Max = max(Max,arr-In); } cout << Max << endl; return 0; }
C++ 解法, 执行用时: 13ms, 内存消耗: 776KB, 提交时间: 2022-03-21
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXN=100000; int price[MAXN]; int DP(int n){ int diff=0; int place=0; for(int i=1;i<n;++i){ if(price[i]-price[place]<=0){ place=i; }else{ diff=max(diff,price[i]-price[place]);} //printf("i=%d diff=%d \n",i,diff); } return diff; } int main(){ int n; scanf("%d",&n); for(int i=0;i<n;++i){ scanf("%d",&price[i]); } int result=DP(n); printf("%d",result); return 0; }