Leetcode 121 Best Time to Buy and Sell Stock 单次买卖股票最大收益

原创 2015年07月08日 23:29:45

原题地址

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/

题目描述

Say you have an array for which the ith element is the price of a given stock on day i.
假设你有一个数组,里面记录的是每一天的股票的价格。

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
如果你至多只能完成一次交易(即,买一次股票、卖一次股票),设计一个算法来计算最大收益。

解题思路

极大值减去极小值即可获得临时最大收益,一次遍历过程中不断更新临时最大收益。遍历结束时即获得最大收益。

算法描述

  1. 极小值low设为第一天的价格。
  2. 遍历剩余的价格,设当前某一天的价格为cur,计算diff=cur-low,如果diff<0,则找到新的极小值;如果diff>max则更新最大收益max=diff,否则继续遍历下一天,重复第2步。
  3. 返回最大收益max。

代码 C

/**
 * 计算最大收益
 * @param prices : 每日价格
 * @param pricesDize : 数据规模
 * @return : 最大收益 
 * @note : 只进行一次买卖
 */
int maxProfit(int* prices, int pricesSize) {
    /* 如果价格数据为空或者只有一个数据,返回0  */
    if (pricesSize <= 1) return 0;

    int min = *prices, day, diff, max = 0;
    for (day = 1; day < pricesSize; ++day) {
        diff = *(prices + day) - min;
        if (diff < 0) min = *(prices + day);
        else if (diff > max) max = diff;
    }

    return max;
}

完整代码https://github.com/Orange1991/leetcode/blob/master/121/c/main.c

代码 CPP

class Solution {
public:
    /**
     * 计算最大收益
     * @param prices : 每日价格
     * @return : 最大收益 
     * @note : 只进行一次买卖
     */
    int maxProfit(vector<int>& prices) {
        int pricesSize = prices.size();
        /* 如果价格数据为空,或者只有一个数据,返回0  */
        if (pricesSize <= 1) return 0;

        int day, diff, min = prices[0], max = 0;
        for (day = 1; day < pricesSize; ++day) {
            diff = prices[day] - min;
            if (diff < 0) min = prices[day];
            else if (diff > max) max = diff;
        }

        return max;
    }
};

完整代码https://github.com/Orange1991/leetcode/blob/master/121/cpp/main.cpp

运行情况

Lauguage Status Time
c Accept 4ms
cpp Accept 8ms

2015/7/8

版权声明:本文为博主原创文章,未经博主允许不得转载。

【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】

【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Say you have a...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月14日 06:16
  • 6331

买卖股票收益最大问题

1、给定一个数组,代表每天股票的价格,买卖一次找到最大的收益。public int maxProfit(int[] prices) { if(prices==null||prices....
  • guoyuguang0
  • guoyuguang0
  • 2016年03月26日 17:23
  • 335

【Leetcode 动态规划】 买卖股票 I II III IV 冷却,共5题

买卖股票问题
  • Dr_Unknown
  • Dr_Unknown
  • 2016年07月18日 09:26
  • 4573

最大数字序列和问题,买卖股票问题,以及最长公共字串问题

最大字串加强版 最大子串和原理 给定由n个整数(可能为负整数)组成的序列A1,A2,A3,...,An,求该序列的连续子段的和的最大值。当所有整数均为负整数时定义其最大子段和为0 例如   {-...
  • fyduan
  • fyduan
  • 2016年04月19日 18:25
  • 708

Best Time to Buy and Sell Stock III 最佳时间买入卖出股票(最多两次买卖)@LeetCode

直到要用DP做,但是一开始思路是错的。后来参考了 http://blog.csdn.net/pickless/article/details/12034365 才意识到可以在整个区间的每一点切开,然后...
  • hellobinfeng
  • hellobinfeng
  • 2013年11月08日 00:34
  • 20467

Best Time to Buy and Sell Stock II 最佳时间买入卖出股票(多次买卖)@LeetCode

package Level3; /** * Best Time to Buy and Sell Stock II * * Say you have an array for which t...
  • hellobinfeng
  • hellobinfeng
  • 2013年11月07日 12:34
  • 9763

[各种面试题] 买卖股票最多K次

题目描述: 给定一个大小为n的数组,数组的元素a[i]代表第i天的股票价格。 设计一个算法,计算在最多允许买卖k次(一买一卖记为一次)的条件下的最大收益。 需要注意的是,你不能同时拥有两份股...
  • a83610312
  • a83610312
  • 2013年10月07日 22:22
  • 2655

如何买卖股票以获得最大收益 java算法

已知一段时间内股价有涨跌,例如 {3,6,1,4,7,3,8,8,3,5}.求最大获利是多少。不能买空卖空。 例如,上例应该是第3天买,第7天卖获利最大,获利是7元。 我没有想出什么好办法,下例就...
  • OnlyQi
  • OnlyQi
  • 2013年01月25日 15:34
  • 4146

Best Time to Buy and Sell Stock III 两次买卖股票的最佳时机 (重重重)

题目: 只能买卖两次,er
  • skyoceanlover
  • skyoceanlover
  • 2014年08月21日 16:51
  • 779

携程校招2017编程题之股票最大利润

题目: 股票利润题目描述有一个数组来存储一支股票每天的价格,例如第i天的股票价格为prices[i]。 现在我们至多做一次股票交易,最多买入一次,卖出一次,设计一个算法求我们买股票能得到的最大收益...
  • yanglr2010
  • yanglr2010
  • 2016年09月28日 16:20
  • 1524
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode 121 Best Time to Buy and Sell Stock 单次买卖股票最大收益
举报原因:
原因补充:

(最多只允许输入30个字)