股票价格上涨等待天数 - 算法题解
股票价格上涨等待天数 - 算法题解
题目描述:
给定某只股票连续N天的价格列表stockPrices,其中stockPrices[i]表示股票某天的价格,请生成一个新列表,对应位置输出为:要想等到股票价格上涨,至少需要等待的天数,如果股票价格不上涨,对应位置输出为0。
输入: 第一行 表示第二行元素的个数N 第二行 为用空格隔开的整数,表示每天股票的价格,其中0<N<=1000000,每天股票价格为正整数
输出: 输出为用空格分隔的长度为N的列表,对应位置为:要想等到股票价格上涨,至少需要等待的天数
样例1: 输入: 5 33 34 14 12 16 输出:1 0 2 1 0
解题思路:
- 创建一个长度为N的结果列表
result,初始值都为0。 - 从第二天开始遍历股票价格列表
stockPrices,将当前价格与前一天的价格进行比较。 - 如果当前价格大于前一天的价格,则说明股票价格上涨,将对应位置的结果列表
result的值设为1。 - 如果当前价格小于等于前一天的价格,则说明股票价格没有上涨,将对应位置的结果列表
result的值加1。 - 返回结果列表
result。
时间复杂度分析: 遍历股票价格列表需要O(N)的时间,其中N为股票价格列表的长度。
空间复杂度分析:
需要一个长度为N的结果列表result,空间复杂度为O(N)。
关键代码如下所示:
def stock_prices(stockPrices):
N = len(stockPrices)
result = [0] * N
for i in range(1, N):
if stockPrices[i] > stockPrices[i-1]:
result[i] = 1
else:
result[i] = result[i-1] + 1
return result
# 测试样例
stockPrices = [33, 34, 14, 12, 16]
print(stock_prices(stockPrices))
代码解释:
stock_prices(stockPrices)函数接受一个股票价格列表stockPrices作为参数。- 使用
len(stockPrices)获取股票价格列表的长度N。 - 初始化一个长度为
N的列表result,并将其所有元素都设置为 0。 - 使用
for循环遍历stockPrices列表,从第二个元素开始 (索引为 1)。 - 在循环中,比较当前元素
stockPrices[i]和前一个元素stockPrices[i-1]。 - 如果当前元素大于前一个元素,则说明股票价格上涨,将对应位置的
result[i]设为 1。 - 否则,说明股票价格没有上涨,将对应位置的
result[i]设为result[i-1] + 1。 - 最后,返回结果列表
result。
测试样例解释:
stockPrices = [33, 34, 14, 12, 16]
在这个例子中,stockPrices 列表表示 5 天的股票价格。程序将会输出 [1, 0, 2, 1, 0],表示:
- 第一天的股票价格为 33,第二天为 34,股票价格上涨,等待天数为 1。
- 第二天股票价格为 34,第三天为 14,股票价格下降,等待天数为 0。
- 第三天股票价格为 14,第四天为 12,股票价格下降,等待天数为 2。
- 第四天股票价格为 12,第五天为 16,股票价格上涨,等待天数为 1。
- 第五天股票价格为 16,没有后续价格,等待天数为 0。
希望以上解释能够帮助您理解这道算法题。如果您还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/qhFY 著作权归作者所有。请勿转载和采集!