CShap Stock span 库存跨度 源代码
时间: 2024-05-04 10:15:20 浏览: 155
以下是C#的Stock Span(库存跨度)源代码:
```csharp
using System;
using System.Collections.Generic;
class StockSpan
{
static int[] CalculateSpan(int[] price)
{
int n = price.Length;
int[] span = new int[n];
Stack<int> stack = new Stack<int>();
span[0] = 1;
stack.Push(0);
for (int i = 1; i < n; i++)
{
while (stack.Count > 0 && price[stack.Peek()] <= price[i])
stack.Pop();
span[i] = (stack.Count == 0) ? (i + 1) : (i - stack.Peek());
stack.Push(i);
}
return span;
}
static void Main(string[] args)
{
int[] price = { 100, 80, 60, 70, 60, 75, 85 };
int[] span = CalculateSpan(price);
Console.WriteLine("Price array: ");
for (int i = 0; i < price.Length; i++)
Console.Write(price[i] + " ");
Console.WriteLine();
Console.WriteLine("Span array: ");
for (int i = 0; i < span.Length; i++)
Console.Write(span[i] + " ");
}
}
```
在这个实现中,我们使用了一个栈来保存每一个价格的索引。我们遍历价格数组,如果栈顶元素的价格小于等于当前价格,我们就弹出栈顶元素,直到栈为空或者栈顶元素的价格大于当前价格。然后,我们将当前价格的跨度设置为栈顶元素的索引与当前索引之差,如果栈为空,我们将当前价格的跨度设置为当前索引加一。最后,我们将当前索引入栈。最终,我们返回跨度数组。
阅读全文