【问题标题】:algorithm : given an array find i,j so that i<j & max(A[j]-A[i]) [duplicate]算法:给定一个数组,找到 i,j 使得 i<j & max(A[j]-A[i]) [重复]
【发布时间】:2017-10-26 10:07:15
【问题描述】:

算法必须得到数组 A[1,,,,n],表示交易日 N 个不同时间的股票价格。 什么是买入给定股票的最佳时机,什么是卖出它的最佳时机? 我认为我必须按升序对数组进行排序,所以对于卖点如此昂贵的价格并以便宜的价格购买,如果可能的话如何解决不排序?

【问题讨论】:

  • 只扫描数组,保持当前最小和最佳差异
  • 我想要的算法应该是 o(n^2) ,你的想法不是
  • 这个算法(和marvel308反向写的一样)更好。它是线性的。二次复杂度适用于蛮力方法 - 使用 j>i 检查所有对

标签: arrays algorithm sorting indexing max


【解决方案1】:

您可以通过以下方式进行操作

  1. 只需从最后一个 idx 循环到第 0 个索引
  2. 在每次 idx 更新时,最大值出现在该点之前
  3. 如果您当时买入股票,您会希望以之后出现的最高价卖出。那将是我们存储的最大元素
  4. 为每一步计算 max - A[i] 的值。这些中的最大值将是您的解决方案

【讨论】:

  • 如果我按升序排序。i是购买的时间因为A[I]=便宜的价格&A[j]=昂贵的价格,所以排序后只打印i&j?正确吗?
  • 我假设 A[] 具有按价格时间顺序排列的元素。
  • 好吧'你说排序无助于解决问题?
  • 是的,我不只对初始数组进行排序
  • 我想要的算法应该是 o(n^2) ,你的想法不是
猜你喜欢
  • 2012-10-20
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2021-04-09
  • 2023-04-05
  • 2021-11-01
  • 1970-01-01
  • 2021-11-03
相关资源
最近更新 更多