123. 买卖股票的最佳时机 III

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

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [3,3,5,0,0,3,1,4]
输出: 6
解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。
     随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3 。

示例 2:

输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。  
     注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。  
     因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入: [7,6,4,3,1]
输出: 0
解释: 在这个情况下, 没有交易完成, 所以最大利润为 0。
 1 class Solution {
 2 public:
 3     int maxProfit(vector<int>& prices) {
 4         int buy1=-99999999, sale1=0, buy2=-99999999, sale2=0;
 5         for(int i=0; i<prices.size(); i++){
 6             buy1 = max(buy1, -prices[i]);
 7             sale1 = max(sale1, buy1+prices[i]);
 8             buy2 = max(buy2, sale1-prices[i]);
 9             sale2 = max(sale2, buy2+prices[i]);
10         }
11         return sale2;
12     }
13 };

原文地址:https://www.cnblogs.com/mr-stn/p/9201800.html

时间: 2024-11-09 14:45:04

123. 买卖股票的最佳时机 III的相关文章

Leetcode 123.买卖股票的最佳时机III

买卖股票的最佳时机III 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 示例 1: 输入: [3,3,5,0,0,3,1,4] 输出: 6 解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 . 随后,在第 7 天(股票价格 = 1)的时候买入,在

[LeetCode] 123. 买卖股票的最佳时机 III

题目链接 : https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/ 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 示例: 示例 1: 输入: [3,3,5,0,0,3,1,4] 输出: 6 解释: 在第 4 天(股票价格 = 0)的时候

123买卖股票的最佳时机III

题目:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易.注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票).链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii 法一:参考别人自己写的代码 思路:动态规划,首先题中有两个变量,股票在第几天卖出和卖出的次数,dp[i][j]表示第i天卖出j次股票后的最大利润

[leetcode]123.买卖股票的最佳时机3

[原题链接][https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/] 分析:动态规划+二分法.以第i天为分界线,计算第i天之前进行一次交易的最大收益left[i],和第i天之后进行一次交易的最大收益right[i],最后遍历一遍找到max{left[i] + right[i]} (0≤i≤n-1),就是最大收益.第i天之前和第i天之后进行一次的最大收益求法如最简单的股票买卖问题. 再求解前先看看最简单的求一次交

买卖股票的最佳时机 III

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成?两笔?交易. 注意:?你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. class Solution { publ

[Leetcode188] 买卖股票的最佳时机IV 动态规划 解题报告

题源:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iv/ 本题代码: 1 /** 2 * @author yuan 3 * @version 0.1 4 * @date 2019/4/5 5 */ 6 public class Leetcode188 { 7 8 private int getBetterBuy(int[] buy, int[] sell, int price, int i) { 9 if (i

每日一题-——LeetCode(121)买卖股票的最佳时机

题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润.注意你不能在买入股票前卖出股票. 示例 输入: [7,1,5,3,6,4] 输出:5 定义:minval = min(minval,prices[i]) 当前的最小价格 maxp = max(maxp,prices[i]-minval) 当前的最大利润 class Solution(object): def maxProfit(

删除排序数组中的重复数字、买卖股票的最佳时机、爬楼梯

题目1:删除排序数组中的重复数字 描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 题目2:买卖股票的最佳时机 描述:假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 题目3:爬楼梯 描述:假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶

代码题(6)— 买卖股票的最佳时机

1.121. 买卖股票的最佳时机(仅限一次) 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 . 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格. c