在Python中查找获利所需等待的最少天数的程序
假设我们有一个以时间顺序表示公司每日股票市场价格的价格列表。我们需要找到一个与原列表等长的列表,其中索引i处的值表示为实现盈利所需等待的最少天数。如果没有这样的方法来获利,则该值应为0。
因此,如果输入是prices = [4, 3, 5, 9, 7, 6],那么输出将是[2, 1, 1, 0, 0, 0]
要解决这个问题,我们将按照以下步骤进行:
- ans :=一个与price大小相同且用0填充的列表
- q :=一个新列表
- 对prices的每个索引i和价格p,执行以下操作:
- while q不为空并且p > q的最后项的第二个值时,执行以下操作:
- j := q的最后一项的第一个元素
- ans[j] := i-j
- 删除q的最后一项
- 在q的末尾插入(i,p)
- while q不为空并且p > q的最后项的第二个值时,执行以下操作:
- 返回ans
让我们看以下实现以便更好地理解:
示例
class Solution:
def solve(self, prices):
ans = [0 for _ in prices]
q = []
for i, p in enumerate(prices):
while q and p > q[-1][1]:
j = q[-1][0]
ans[j] = i - j
q.pop()
q.append((i, p))
return ans
ob = Solution()
prices = [4, 3, 5, 9, 7, 6]
print(ob.solve(prices))
输入
[4, 3, 5, 9, 7, 6]
输出
[2, 1, 1, 0, 0, 0]