给出一只股票的价格,要求给出最佳买入和卖出价格,使得收益最大。

示例:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

分析:

题目的要求是要找到前面的某一个极小值,后面的一个极大值,使得极大值与极小值的差最大。问题解法有二:

其一,通过两次循环,暴力计算每个买入点和卖出点的差,计算最大值。

int[] values = new int[]{7, 1, 5, 3, 6, 4};
int profit = 0;
int buyDate = -1;
int sellDate = -1;for (int i = 0; i < values.length - 1; i++){for (int j = i+1; j < values.length; j++){if (values[j] - values[i] > profit){buyDate = i;sellDate = j;profit = values[j] - values[i];}}
}

其二,通过动态规划的方法,一次循环搞定最大利润的计算。

每个位置的最大利润我们用dp[i]表示,则dp[i] = max(price[i] - min, dp[i-1]);

如果我们只是计算最大利润,那么可以简化为dp[i] = max(price[i] - min, maxProfit)

int maxProfit = 0, min = Integer.MAX_VALUE;for(int i = 0; i < values.length; i++){if(values[i] < min)// 净值下降,只需要保存最新的极小值min = values[i];else if(values[i] - min > maxProfit)// 收益变大,更新最大收益maxProfit = values[i] - min;
}

解法一O(n^2), 解法二O(n),显然解法二更优。

【动态规划】股票买入卖出点计算相关推荐

  1. 漫画:程序教你寻找股票买入卖出的最佳时机(动态规划)

    作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 前一段时间,我们介绍了一个经典算法题目:寻找股票买入卖出的最佳时机.这个题目看似简单,却有着许多种变化. 在上一篇中 ...

  2. 漫画:寻找股票买入卖出的最佳时机(动态规划)

    前一段时间,我们介绍了一个经典算法题目:寻找股票买入卖出的最佳时机.这个题目看似简单,却有着许多种变化. 在上一篇中,我们讲解了最多1次买卖和无限次买卖的解法,那么,如果只允许最多2次股票买卖,如何寻 ...

  3. 股票买入卖出 LeetCode 变形题 度小满

    度小满,股票买入卖出变种题. 最大化收益,最小化买卖次数. def stock():profit = 0length = len(trade)count = 0for i in range(lengt ...

  4. 漫画:寻找股票买入卖出的最佳时机

    -----  第二天  ----- 什么意思呢?让我们来举个例子,给定如下数组: 该数组对应的股票涨跌曲线如下: 显然,从第2天价格为1的时候买入,从第5天价格为8的时候卖出,可以获得最大收益: 此时 ...

  5. 股票买入卖出问题 leetcode123(最多k次交易)

    leetcode123 问题链接 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/ 给定一些天数的股票价格list, ...

  6. 网易游戏面试--两次股票买入卖出的最大收益

    第一问: 对于只有一次买入卖出的最大收益可以参照http://blog.csdn.net/calmreason/article/details/7904062,已经将的非常详细了 第二问: 当时做完这 ...

  7. LeetCode 121 Best Time to Buy and Sell Stock(股票买入卖出的最佳时间)

    翻译 话说你有一个数组,其中第i个元素表示在第i天的股票价格.如果你被只被允许最多一次交易(例如,买入然后卖出一个股票),设计一个算法并找出最大利润. 原文 Say you have an array ...

  8. LeetCode 122 Best Time to Buy and Sell Stock II(股票买入卖出的最佳时间 II)

    翻译 话说你有一个数组,其中第i个元素表示第i天的股票价格.设计一个算法以找到最大利润.你可以尽可能多的进行交易(例如,多次买入卖出股票).然而,你不能在同一时间来多次交易.(例如,你必须在下一次买入 ...

  9. 《港联证券》股票必须持仓多久才能卖?股票买入多久显示持仓?

    有的新手股民在炒股的时候,对股票的了解是不多的,就会在网上搜索材料来进行学习,那么股票有必要持仓多久才干卖?股票买入多久显现持仓?港联证券为我们预备了相关内容,以供参阅. 股票有必要持仓多久才干卖? ...

最新文章

  1. apue第四章习题的一些拙见(不定时更新)
  2. Android4.1 触摸屏(TP)划线曲折、不圆润的解决办法
  3. 功能农业奠基人-农业大健康·万祥军:赵其国安康工作站揭牌
  4. Web前端面试指导(十八):用纯CSS创建一个三角形的原理是什么?
  5. java二维码生成_如何使用 Java 生成二维码?
  6. 浅谈物联网时代智能停车发展趋势
  7. oracle 字段全大写,Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)...
  8. 轮子来袭 vJine.Core Orm 之 01_快速体验
  9. AJPFX总结String类的特点
  10. vim 之cscope的使用
  11. 关于使用js的setAttribute和getAttribute取dom属性在ie ff safri下的问题
  12. 【BZOJ4049】【Cerc2014】 Mountainous landscape 【凸包】【线段树】
  13. JAVA解析字符串数学公式
  14. python 生存分析_用python教程进行生存分析何时何地
  15. 51单片机密码锁(含确认键、清零键、删除键)
  16. 100条信号完整性效应的经验法则
  17. SQL语句报错:1062, “Duplicate entry ‘XXX‘ for key ‘XXX‘
  18. 计算机通过镜子测试,人工智能通过镜子测试或许只是一个悖论
  19. QString::number()
  20. 基于SSM的智慧物业系统设计与实现

热门文章

  1. Echarts之折线图
  2. 2022年6月28日
  3. python 二维码生成与识别
  4. Teamcenter每个月限制许可,模块许可限制,用户账号限制
  5. php设置只能在微信打开,PHP如何限制页面只能在微信自带浏览器访问?
  6. HTML学习笔记-基础知识整理
  7. 为什么merge的时候要用squash
  8. EBS WebADI:简介
  9. 纠结了一晚上的问题---点击导航栏的一个文本链接后所有导航栏文本链接颜色都变成访问过的颜色了
  10. NFC源码分析之R/W工作模式