题解 | #买卖股票的最好时机(一)#
买卖股票的最好时机(一)
https://www.nowcoder.com/practice/351b87e53d0d44928f4de9b6217d36bb
核心思想是:第N天的最大收益第N天市值减去前N天市值的最小值,从j=n-1开始一直往回推,同时可以用a[j]村粗第J天的最大收益,还有其他细节自己也要考虑(N=0或1)
#include <stdio.h> int Min(int a[],int n); int main() { int n,max=0,mi=0; scanf("%d",&n); int a[n],Min[n]; for(int i=0;i<n;i++) { scanf("%d",&a[i]);//读入数组 if(i==0)//Min初始化 { Min[i]=a[i];//Min[i]存储前i个数的最小值 } else { if(a[i]<Min[i-1]){//如果a[i]是前N个数的最小值 Min[i]=a[i];//则更新Min[i] } else { Min[i]=Min[i-1];//如果不是则前i个数的最小值不变 } } } if(n<=1)//对只有一个数和只有两个数要单独考虑 { printf("%d",0); return 0; } else if(n==2) { if(a[1]-a[0]>0) { printf("%d",a[1]-a[0]); } else { printf("0"); } } else{ for(int j=n-1;j>1;j--)//核心思想 { a[j]=a[j]-Min[j-1];//第J天的最大收益为第J天的市值减去前J-1天的最小市值即为最大收益 } for(int k=2;k<n;k++ ) { if(a[k]>max)//遍历第k天的最大收益数组,找出最大值 { max=a[k]; } } printf("%d",max); } return 0; }