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);
 */
相关推荐
hoiii1878 分钟前
拉丁超立方抽样(LHS)的MATLAB实现:基本采样与相关采样
开发语言·算法
不想看见40410 分钟前
旋转数组查找数字--力扣101算法题解笔记
数据结构·算法
好学且牛逼的马12 分钟前
【Hot100|24-LeetCode 141. 环形链表 - 完整解法详解】
算法·leetcode·链表
yxc_inspire13 分钟前
2026年寒假牛客训练赛补题(六)
算法
哈库纳14 分钟前
dbVisitor 6.7.0 解读:公元前日期处理的两种方案
后端·算法·架构
myron668817 分钟前
基于STM32LXXX的模数转换芯片ADC(ADS1110A0IDBVR)驱动C程序设计
c语言·stm32·嵌入式硬件
AC赳赳老秦20 分钟前
边缘AI落地趋势:DeepSeek在工业边缘节点的部署与低功耗优化技巧
人工智能·python·算法·云原生·架构·pygame·deepseek
Polaris北21 分钟前
第二十五天打卡
算法
甄心爱学习24 分钟前
【单调栈】【哈希】
算法·哈希算法
蚂蚁数据AntData31 分钟前
DB-GPT 0.7.5 版本更新:基于 Falcon 评测集的Text2SQL评测体系全面升级,支持LLM/Agent两种评测模式和多环境评测
大数据·人工智能·算法·ai·开源