LeetCode //C - 901. Online Stock Span

901. Online Stock Span

Design an algorithm that collects daily price quotes for some stock and returns the span of that stock's price for the current day.

The span of the stock's price in one day is the maximum number of consecutive days (starting from that day and going backward) for which the stock price was less than or equal to the price of that day.

  • For example, if the prices of the stock in the last four days is 7,2,1,2 and the price of the stock today is 2, then the span of today is 4 because starting from today, the price of the stock was less than or equal 2 for 4 consecutive days.
  • Also, if the prices of the stock in the last four days is 7,34,1,2 and the price of the stock today is 8, then the span of today is 3 because starting from today, the price of the stock was less than or equal 8 for 3 consecutive days.

Implement the StockSpanner class:

  • StockSpanner() Initializes the object of the class.
  • int next(int price) Returns the span of the stock's price given that today's price is price.
Example 1:

Input:

"StockSpanner", "next", "next", "next", "next", "next", "next", "next"

\[\], \[100\], \[80\], \[60\], \[70\], \[60\], \[75\], \[85\]

Output:

null, 1, 1, 1, 2, 1, 4, 6

Explanation

StockSpanner stockSpanner = new StockSpanner();

stockSpanner.next(100); // return 1

stockSpanner.next(80); // return 1

stockSpanner.next(60); // return 1

stockSpanner.next(70); // return 2

stockSpanner.next(60); // return 1

stockSpanner.next(75); // return 4, because the last 4 prices (including today's price of 75) were less than or equal to today's price.

stockSpanner.next(85); // return 6

Constraints:
  • 1 < = p r i c e < = 1 0 5 1 <= price <= 10^5 1<=price<=105
  • At most 1 0 4 10^4 104 calls will be made to next.

From: LeetCode

Link: 901. Online Stock Span


Solution:

Ideas:

This code defines a StockSpanner struct with three fields: prices and spans are dynamically allocated arrays to store the price and span of each stock, and top is used to keep track of the stack's top element index. The stockSpannerCreate function initializes a StockSpanner object, stockSpannerNext processes the next stock price and calculates its span, and stockSpannerFree cleans up the allocated memory to prevent memory leaks.

Caode:
c 复制代码
typedef struct {
    int* prices;
    int* spans;
    int top;
} StockSpanner;

StockSpanner* stockSpannerCreate() {
    StockSpanner* spanner = (StockSpanner*)malloc(sizeof(StockSpanner));
    spanner->prices = (int*)malloc(sizeof(int) * 10000); // Assuming at most 10^4 calls.
    spanner->spans = (int*)malloc(sizeof(int) * 10000);  // Same assumption as above.
    spanner->top = -1; // Initialize stack top as -1 indicating empty stack.
    return spanner;
}

int stockSpannerNext(StockSpanner* obj, int price) {
    int span = 1;
    while (obj->top >= 0 && obj->prices[obj->top] <= price) {
        span += obj->spans[obj->top]; // Add the span of elements that are less than or equal to the current price.
        obj->top--; // Pop the elements that are less than or equal to the current price.
    }
    obj->top++;
    obj->prices[obj->top] = price; // Push the current price onto the stack.
    obj->spans[obj->top] = span; // Push the current span onto the stack.
    return span;
}

void stockSpannerFree(StockSpanner* obj) {
    free(obj->prices); // Free the allocated memory for prices.
    free(obj->spans); // Free the allocated memory for spans.
    free(obj); // Finally, free the object itself.
}

/**
 * Your StockSpanner struct will be instantiated and called as such:
 * StockSpanner* obj = stockSpannerCreate();
 * int param_1 = stockSpannerNext(obj, price);
 * stockSpannerFree(obj);
 */
相关推荐
sali-tec3 分钟前
C# 基于OpenCv的视觉工作流-章84-包胶有无检测
图像处理·人工智能·opencv·算法·计算机视觉
Irissgwe10 分钟前
数据结构-排序
数据结构·算法·排序算法
小O的算法实验室14 分钟前
2025年IEEE TITS,基于动态聚类粒子群算法的无人机任务分配与路径规划
算法
Tairitsu_H19 分钟前
[LC优选算法#5] 分治:快排 | 颜色分类 | 排序数组 | 第K大元素
c++·算法·leetcode·排序算法·快速排序
人邮异步社区19 分钟前
C语言进阶的书籍推荐
c语言·开发语言
青山木21 分钟前
Hot 100 --- 滑动窗口最大值
java·数据结构·算法·leetcode·动态规划
青山木22 分钟前
Hot 100 --- 除自身以外数组的乘积
java·数据结构·算法
Frank学习路上25 分钟前
【C++】面试:STL容器与算法
c++·算法·面试
10岁的博客27 分钟前
NOIP2010普及组「接水问题」详解:模拟算法与优先队列解法
开发语言·c++·算法
彼岸星光ぐ>28 分钟前
排序算法对比
数据结构·算法·排序算法