自学内容网 自学内容网

【力扣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)!