Leetcode刷题(121. 买卖股票的最佳时机)

Leetcode刷题(121. 买卖股票的最佳时机)

  • 一.题目
  • 二.代码(C)
    • 方法一
    • 方法二
  • 三.提交记录
    • 方法一
    • 方法二
  • 四.备注

一.题目

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

二.代码(C)

方法一

int maxProfit(int* prices, int pricesSize)
{
    int i,j;
    int profit=0;
    for(i=0;i<pricesSize;i++)
    {
        for(j=i+1;j<pricesSize;j++)
        {
            if (prices[j]-prices[i]>profit)
            {
                profit = prices[j]-prices[i];
            }
        }
    }
    return profit;
}

方法二

int max(int a,int b);
int maxProfit(int* prices, int pricesSize)
{
    int i;
    int profit=0;
    int min;
    for(i=0;i<pricesSize;i++)
    {
        if (i==0)
        {
            min = prices[0];
            continue;
        }
        if (prices[i]<min)
            min = prices[i];
        else
        {
            profit = max(profit,prices[i]-min);
        }
    }
    return profit;
}
int max(int a,int b)
{
    if (a>b)
        return a;
    else
        return b;
}

三.提交记录

方法一

Leetcode刷题(121. 买卖股票的最佳时机)_第1张图片
Leetcode刷题(121. 买卖股票的最佳时机)_第2张图片

方法二

在这里插入图片描述
Leetcode刷题(121. 买卖股票的最佳时机)_第3张图片

四.备注

方法一采用简单的遍历,方法简单,但计算量大。
方法二采用动态规划的思路,第i天的最大收益=max(第i-1天的最大收益,第i天的价格-最低价格)。

你可能感兴趣的:(Leetcode,C语言)