121. Best Time to Buy and Sell Stock& 122. Best Time to Buy and Sell Stock II

来源:互联网 发布:pc端授权微信登陆java 编辑:程序博客网 时间:2024/06/04 23:27

Say you have an array for which the ith element is the price of a given stock on dayi.

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.

Example 1:

Input: [7, 1, 5, 3, 6, 4]Output: 5max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)

Example 2:

Input: [7, 6, 4, 3, 1]Output: 0In this case, no transaction is done, i.e. max profit = 0.

Subscribe to see which companies asked this question


第一题,用kadane算法,和寻找最大子串和是一个思路。对于这道题来讲,原始串就是每个prices和它之前的prices的差。

class Solution {public:    int maxProfit(vector<int>& prices) {                int cur=0,soFar=0;                for(int i=1;i<prices.size();i++){            cur=max(0, cur+prices[i]-prices[i-1]);            soFar=max(cur, soFar);        }                return soFar;    }};

第二题是进阶版

Say you have an array for which the ith element is the price of a given stock on dayi.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

leetcode上有段分析很好。

suppose the first sequence is "a <= b <= c <= d", the profit is "d - a = (b - a) + (c - b) + (d - c)" without a doubt. And suppose another one is "a <= b >= b' <= c <= d", the profit is not difficult to be figured out as "(b - a) + (d - b')". So you just target at monotone sequences.

class Solution {public:    int maxProfit(vector<int>& prices) {                int total=0;        for(int i=1;i<prices.size();i++)            total+=max(prices[i]-prices[i-1],0);                return total;    }};


0 0
原创粉丝点击