【力扣C语言】每日一题—第121题,买卖股票的最佳时机
题目:
返回获取的最大利润:
这题可浪费时间了!!!
主要是暴力求解超时!!!
最后参考了一下答案
解题思路:
思路一:
暴力求解:两重for循环判断最大利润(超时)
VS代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int prices[]={7,6,4,3,1};
int pricesSize=5;
int prices_max=prices[1]-prices[0];
for(int i=0;i<pricesSize;i++)
{
for(int j=0;j<i;j++)
{
if((prices[i]-prices[j])>prices_max)
{
prices_max=prices[i]-prices[j];
}
}
}
if(prices_max<0)
{
// return 0;
prices_max=0;
}
//return prices_max;
printf("%d\n",prices_max);
return 0;
}
思路二:
1、定义最小值为999999(定大一点,小了在范围内会出现不跳转的情况导致出错,比十的四次方大就可以)定义最大值为0;
2、i从0到pricesSize(有效数字个数);
3、判断最大值与利润(当前遍历值-最小值)的大小,利润大于最大值,将利润赋值给最大值。
4、判断最小值与当前值的大小,最小遍历值小于当前值,将当前遍历值赋给最小值。
5、返回最大值。
Vs代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int prices[]={7,1,5,3,6,4};
int pricesSize=6;
int prices_max=0;
int prices_min=9999;
for(int i=0;i<pricesSize;i++)
{
prices_max=prices_max<(prices[i]-prices_min)?(prices[i]-prices_min):prices_max;
prices_min=prices_min>prices[i]?prices[i]:prices_min;
}
printf("%d\n",prices_max);
return 0;
}
最终通过代码:
int maxProfit(int* prices, int pricesSize) {
int prices_min=10001,prices_max=0;
for(int i=0;i<pricesSize;i++)
{
prices_max=prices_max<(prices[i]-prices_min)?(prices[i]-prices_min):prices_max;
prices_min=prices_min>prices[i]?prices[i]:prices_min;
}
return prices_max;
}
再接再励吧!!!!!!!
脑袋空空。
如果有更好的方案,请赐教,感谢!
原文地址:https://blog.csdn.net/m0_65146517/article/details/140307962
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!