- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有一个经典的面试问题,利润最大化,一次交易买股票,允许n次交易和k次交易。
有人问我类似的问题,但有一个扭曲约束:您可以多次购买股票(任何一天不超过一个单位),但您不能在卖出股票后购买。
这有一个你只卖一次的引理。
例如:70 40 90 110 80 100
选项 1:B B B 卖出 _ _ = 130
选项 2:B B B X B 卖出 = 120
老问题
https://www.geeksforgeeks.org/stock-buy-sell/
https://www.geeksforgeeks.org/maximum-profit-by-buying-and-selling-a-share-at-most-twice/
https://www.geeksforgeeks.org/maximum-profit-by-buying-and-selling-a-share-at-most-k-times/
Stackoverflow 讨论
maximizing profit for given stock data via DP
Maximizing profit for given stock quotes
Maximum profit by buying and selling a share exactly k times
最佳答案
这可以在 O(n lg n)
中解决与 O(n)
使用 BST 的空间。
class BSTNode{
BSTNode(val){
this.val = val
this.sum = sum
this.left = this.right = null
this.count = 1
}
insert(val){
if(val < this.val)
insert val into the left subtree
else if(val > this.val)
insert val into the right subtree
this.sum += val
this.count++
}
count_sum_nodes_upper_bound(val){
if(val < this.val)
return this.left.sum_nodes_lower_bound(val)
else if(val == this.val)
return this.left.sum, this.left.count
else{
right_sum, right_count = this.right.sum_nodes_lower_bound(val)
return (this.sum - this.right.sum + right_sum),
(this.count - this.right.count + right_count)
}
}
}
以上只是适当的 BST 应该是什么样子的粗略概述。在实践中,您可能希望改用平衡树并检查 count_sum_nodes_lower_bound
中是否存在子树。 .上面代码解释:
每个BSTNode
除了 BST 的标准属性外,还拥有属性 sum
和 count
, 其中count
是子树中元素的数量,sum
是其中所有元素的总和。
Insert 的工作方式与它在普通 BST 中的工作方式相同,除了在每个节点中对应的 sum
。和 count
需要更新。如果多次插入相同的值,sum
和 count
将更新以反射(reflect)口是心非。
然而,核心部分是方法 count_sum_nodes_upper_bound
,计算给定上限的元素计数及其总和。对于给定的上限 b
值 v
的节点上可能发生三种情况:
b < v
: 所有相关的元素都包含在左子树中b == v
: 左子树为查询结果b > v
:左子树和当前节点中的所有值都是子集的一部分。另外右子树的一些节点也是结果的一部分,我们需要通过递归找到。有了这个 BST,我们现在可以轻松找到上述问题的解决方案:
maximize_profit(A){
node = BSTNode(A[0])
max = 0
max_idx = -1
for(i in 1..(A.length - 1)){
sum, count = node.count_sum_nodes_upper_bound(A[i])
gain = A[i] * count - sum
if(max < gain){
max = gain
max_idx = i
}
node.insert(A[i])
}
return max_idx
}
上述代码根据存储在 BST 中的值找到最佳销售日期的索引。在迭代开始时 i
, node
将包含 A[0..i - 1]
中的所有值.唯一值得购买的股票是那些值(value)低于 A[i]
的股票.我们可以在O(lg n)
中查询这些股票的数量和总和。使用 count_sum_nodes_upper_bound
.如果总和为 s
,则这些股票的总 yield 和他们的数量 c
然后是所有股票的卖出价 (A[i] * c
) 减去每只股票的买入价 (s
)。
购买股票之后可以在 O(n)
中轻松完成通过过滤A
(或根据您的需要扩展 BST 的功能)。
关于algorithm - 面试题: Buy and sell stocks to maximize profit with constraint of not buying once you sell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54151834/
我正在查看 SQL Server 2008 的 AdventureWorks 示例数据库,我在他们的创建脚本中看到他们倾向于使用以下内容: ALTER TABLE [Production].[Prod
我目前正在使用 PostgreSQL 9.5,想知道是否有可能在 ON CONFLICT ON CONSTRAINT 语句中包含 2 个约束的名称。我的sql如下 INSERT INTO LIVE.T
使用 htmlhelpers 可以限制你的助手将绑定(bind)到什么类型 public static HtmlString DatePicker(this HtmlHelper html,
我使用的是 Symfony 2.5,我的 Model 类如下: /** * @UserAssert\UserPasswordReset */ class ResetPassword { /** *
我有 3 个 View :A、B、C。 (A 和 B 的高度相等)开始时 B 的可见性消失,C 的顶部约束是 A 的底部,因此 C 出现在 A 下方。一段时间后,我将 A 的可见性更改为消失,将 B
在 Dojo NumberTextBox 的文档中,措辞引用了“Dojo 约束语言”,甚至包括有用的 link .不幸的是,链接指向的页面仅显示 this document has been depr
在我的表中,我有一个唯一的约束。在 hibernate 中,当我添加一个违反该约束的项目时,我想捕获它,因此它将更新而不是创建一个项目。 当我没有设置 try-catch block 时 up
我正在尝试在“或”UILabel 附近添加两条 1 像素线(由 UIViews 组成)。 除了我从 Interface Builder 中的第一张图片收到警告外,一切看起来都很好并且按预期工作: Le
我已经开始学习安卓了。我正在尝试使用 Google Map API。每次我尝试启动我的应用程序时,它都会崩溃,经过调查,我在 build.gradle 文件中发现了一个通知。 Please refer
我有自定义约束: @Target({FIELD, METHOD}) @Retention(RetentionPolicy.RUNTIME) @ConstraintComposition(Composi
我正在将 Graphql 服务器与 Prisma 一起使用。但是当我尝试运行代码时出现此错误我正在使用 const { GraphQLServer } = require('graphql-yoga'
更新到 com.android.support.constraint:constraint-layout:1.1.0 之后 约束布局崩溃说: All children of constraint la
我在 Xcode 10 中工作,在尝试向我的 View 添加一些非常简单的约束时遇到了一些错误。 我有一个 UICollectionViewCell,我正在向其添加一个 UIStackView。我调整
尝试在 Laravel 上创建一个待办事项列表应用程序,但是当我尝试单击按钮创建一个新的待办事项列表时,出现此错误: SQLSTATE[23000]: Integrity constraint vio
我正在编写一个基于网格的 View ,使用以下代码动态添加 NSLayoutConstraints for (x, column) in enumerate(board) { for (y,
我正在尝试使用 Constraint composition并希望为每个复合约束定义组,如下例所示:- 复合约束 @Target({ ElementType.FIELD, Elemen
我有一些添加了外键约束的表。它们与代码生成一起使用,以在生成的存储过程中设置特定的联接。 是否可以通过在事务中调用多个删除来覆盖这些约束,特别是 C# 中的“TransactionScope”,或者绝
我需要向现有 SQL Server 表添加约束,但前提是该表尚不存在。 我使用以下 SQL 创建约束。 ALTER TABLE [Foo] ADD CONSTRAINT [FK_Foo_Bar] FO
这是我的总输出: Executing SQL script in server ERROR: Error 1215: Cannot add foreign key constraint CREATE
我正在增加 Facebook SDK 登录按钮 (FBSDKLoginButton) 的大小。 Facebook SDK 源代码向 FBSDKLoginButton 添加了一个约束,height =
我是一名优秀的程序员,十分优秀!