一家金融软件公司对程序员职位的面试问题
我说的是哪一天的股票价格。
如果你只被允许买入一股股票,卖出一股股票,那么设计一个算法来寻找买入和卖出的最佳时机。
我的解决方案:我的解决方案是,在arraysize-1天内,将第一天和第一天之间的股价差异做成一个数组,然后使用Kadane算法返回最大连续子数组的和。然后,我会在最大的连续阵列开始时买入,在最大的连续阵列结束时卖出。
我想知道我的解决方案是否正确,还有更好的解决方案吗???
回答后,我被问到一个后续问题,我的回答完全相同
问题2)考虑到你知道x公司未来10天的收盘价,设计一个算法来确定你是否应该每天买入、卖出或持有(你每天只能做出一个决定),以实现利润最大化
例:第一天收盘价:2.24
第二天收盘价:2.11
第10天收盘价:3.00
我的解决方案:同上
我想知道如果有什么更好的算法有最大化的利润鉴于我可以作出决定每一天
你对问题1的回答是正确的。
你对问题2的回答不正确。要解决这个问题,你要从最后开始,在每一步选择最佳选项。例如,给定序列{1, 3, 5, 4, 6},因为4
以下是一些替代答案:
Q1)在提供的阵列中从左到右工作。追踪迄今为止的最低价格。当你看到数组中的一个元素时,记下那里的价格和目前为止的最低价格之间的差异,更新目前为止的最低价格,并跟踪看到的最高价格差异。我的答案是,在以当时看到的最低价格购买之后,通过出售获得最大差异的利润。
Q2)将其视为一个动态规划问题,其中任何时间点的状态都是您是否拥有股份。再次从左到右工作。在每个点找到尽可能高的利润,前提是在该时间点结束时拥有股份,并且在该时间点结束时您没有股份。你可以根据上一个时间步的计算结果来计算:在一个例子中,比较购买股票并从上一个时间点结束时你不拥有的利润中减去这一点的选项,或者持有你在上一个时间点拥有的股票的选项。在另一个例子中,比较出售股票以增加利润的选项,如果你在上一个时间点拥有,或者保持不变,如果你在上一个时间点没有拥有的利润。作为动态编程的标准,您保留在每个时间点做出的决定,并在最后通过逆向工作恢复正确的决策列表。
Q1如果你只被允许买入一股股票,卖出一股股票,那么设计一个算法来寻找买入和卖出的最佳时机。
在数组的单次遍历中,确定价格最低的索引i
,以及价格最高的索引j
。你在i
买入,在j
卖出(通过借入股票在买入前卖出,在金融中通常是允许的,所以如果j
Q2考虑到你知道x公司未来10天的收盘价,设计一个算法来确定你是否应该每天买入、卖出或持有(你每天只能做出一个决定),以实现利润最大化
只有10天,因此只有不同的可能性。因此,使用暴力是完全可能的。也就是说,尝试各种可能性,只需选择利润最大的一种。(即使找到了更高效的算法,这仍然是测试更高效算法的有用方法。)
暴力法产生的一些解决方案可能无效,例如,不可能一次拥有(或欠下)多份股份。此外,你是否需要在10天结束时持有0只股票,或者在10天结束时是否有任何头寸自动清算?此外,我想澄清我在第一季度做出的假设,即有可能先卖出再买入,以利用股价下跌的机会。最后,可能需要考虑交易费用,包括在购买前借入股票以卖出股票所需支付的费用。
一旦这些假设得到澄清,就有可能设计出更有效的算法。例如,在最简单的情况下,如果你只能持有一股股票,而且你必须在卖出之前买入,那么你将在系列的第一个最小值处有一个“买入”,在最后一个最大值处有一个“卖出”,并在中间的任何最小值和最大值处买入和卖出。
我想得越多,我就越觉得这些面试问题既是关于问题的解决方案,也是关于候选人如何以及是否澄清问题的。
给你n天的股票价格。通过股票交易获得最大利润。你每天最多只能交易一次:每天你可以选择购买一只股票,或者卖出一只股票(如果你有),或者放弃当天的交易,什么都不做。 给定,返回 解释: 你可以在第一天和第二天购买,在第三天和第四天出售。 利润:-1-2109=16 给定,返回 解释: 你可以在第二天买入,第四天卖出。 利润:-5 10=5 困难的部分是,你可以进行连续的买入和/或卖出,这意味着一旦你持
尝试解决这个问题:假设您有一个数组,其中第i个元素是给定股票在第i天的价格。 设计一个算法来寻找最大利润。您最多可以完成两笔交易。 解决方案:我正在做的是分而治之的方法。 dp[i][j]是ith和jth day之间的最大利润。计算如下: dp[i][j]=max(dp[i][j],max(prices[i]-prices[j],dp[k][j],dp[i][k1]),其中k小于i且大于j。 现在
本文向大家介绍基于java计算买卖股票的最佳时机,包括了基于java计算买卖股票的最佳时机的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计的收入差 分析: 如果当前位置i的价格比i+1的价格高,则当前不是买
有人给了我一个课本上的问题,我弄不懂。它是: 假设您有一只股票STOK,您打算将所有资金投资一个月(天),到月底您无法持有任何股票。您有钱。对于任何一天STOK的价格都是,并且在任何一天您都可以买卖股票。但是,您一天可以买卖多少股票是有限制的(买卖是一样的)。如果您愿意,您可以购买非整数单位的股票,以便于计算。鉴于这些功能,您如何安排购买计划以最大化您的利润? 天真的解决方案:每天在以下限制条件下
我了解用交易费购买和出售股票的最佳时间的解决方案,以及与股票出售相关的其他5个问题。我只想深入了解如何在问题中提出这种递归关系。 我读过https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/discuss/108870/most-consistent-ways-of-dealing-wi
假设你有一个数组,其第i个元素是第一天给定股票的价格。 如果您可以进行无限次的买卖(一次只能持有一只股票),但每次出售都需要支付交易费,请计算您可以获得的最大利润。 样本输入{1,3,7,5,10,3}fee=3。 如果你做了两次交易,总利润是(7-1)-3(10-5)-3=5。如果你只进行一次交易,总利润为(10-1)-3=6。 最初的版本很简单,但我不知道如何接近这个修改后的版本。有人能给我一