最佳买卖股票时间

题目:

给出一个数组,第i个数代表第i天的价格,请选择一种策略,使得收益最大。每天仅能买卖一次

答案:

// 找出所有上涨区间,每个区间的第一天买、最后一天卖

// 输入int a[], length

bool hasPos = false; // 是否有持仓

for (int i = 0; i < length - 1; i++)
{
  if (a[i + 1] < a[i])      // 明天价格下跌
  {
    if (hasPos) a[i] = -1; // 如果有持仓就卖
    else a[i] = 0;     // 没有持仓就不动
    hasPos = false;
  }
  else if (a[i + 1] > a[i])   // 明天价格上涨
  {
    if (hasPos) a[i] = 0;  // 有持仓就不动
    else a[i] = 1;      // 没有持仓就赶紧买
    hasPos = true;
  }
  else a[i] = 0;      // 价格不变就不动
}

a[length - 1] = hasPos ? -1 : 0; // 最后一天,有持仓就卖了

// 得到一组[0, 1, 0, 0, -1, ...]的结果,遇到1就买入,遇到-1就卖出

时间: 2024-08-06 03:35:06

最佳买卖股票时间的相关文章

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

[121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 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

Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown)

股票问题: 309. 最佳买卖股票时机含冷冻期 714. 买卖股票的最佳时机含手续费 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .? 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天). 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入,

309. 最佳买卖股票时机含冷冻期

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .? 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天). 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出] 未持有股票和冷冻期设置为同一种状态dp1,持有股票设置为一种状态dp2. 未持

leecode 309. 最佳买卖股票时机含冷冻期

/***** //sell[i]表示截至第i天,最后一个操作是卖时的最大收益: //buy[i]表示截至第i天,最后一个操作是买时的最大收益: //cool[i]表示截至第i天,最后一个操作是冷冻期时的最大收益: //递推公式: //sell[i] = max(buy[i-1]+prices[i], sell[i-1]) (第一项表示第i天卖出,第二项表示第i天冷冻) //buy[i] = max(cool[i-1]-prices[i], buy[i-1]) (第一项表示第i天买进,第二项表示第

Leetcode 309 最佳买卖股票时机含冷冻期 (动态规划)

又是一道找到了状态转移方程,就可以迎刃而解的问题 但是状态转移方程不好找啊 分析题目: 每一天的四种状态:买进.卖出.冷冻期.什么都不做 每天的状态排列遵循:买...卖冷...买...卖冷...  其中...代表什么都不做的日子,可能有多个 因为有的日子什么都不做,没办法指明某一天到底进行了哪种操作,所以将状态定为“这一天及之前进行的最后操作” 第i天及以前,进行的最后操作为买进,所获得的最大收益:sell[i] 类似地定义buy[i] ,cool[i] 状态转移方程: sell[i]=buy[

Leetocode全部5道买卖股票问题总结(121+122+123+188+309)

题目1----121. 买卖股票的最佳时机I: 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 解答: 限制只能买入卖出一次 DP1: buy[i]记录截止到第i天是买入的状态的最小花费(值为负数) 1 class Solution { 2 pub

[LeetCode] 123. Best Time to Buy and Sell Stock III 买卖股票的最佳时间 III

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most two transactions. Note:You may not engage in multiple transactions at the same time (ie,

买卖股票的最佳时机I II III IV

I 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. II 假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格.设计一个算法来找到最大的利润.你可以完成尽可能多的交易(多次买卖股票).然而,你不能同时参与多个交易(你必须在再次购买前出售股票). III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组

python买卖股票的最佳时机--贪心/蛮力算法简介

开始刷leetcode算法题 今天做的是"买卖股票的最佳时机" 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 看到这个题目 最初的想法是蛮力法 通过两层循环 不断计算不同天之间的利润及利润和 下面上代码 1 class Solution(object): 2 def maxProfit(self,