2023年12月3日 星期日

[901] Online Stock Span

想的太簡單了!!!當然每次都塞進去然後一個一個往前算 沒有不行XD
就是很慢而已XD 先把阿Q作法列在最後QQ

stack的精神是~~~多一個欄位去紀錄該stock price 所累積的span 數字是多少
當有item要被pop出來的時候,span就累積給把它pop出來的那個人!!!
(真的是會錯在一些很愚蠢的地方Orz 像是copy paste 順手把++ 或-- 又多做了一次之類的= =)

typedef struct {
int data[10000][2];
int top;
} StockSpanner;


StockSpanner* stockSpannerCreate() {
StockSpanner* stock = calloc (1, sizeof(StockSpanner));
stock->top = -1;
return stock;
}

int stockSpannerNext(StockSpanner* obj, int price) {
int top = obj->top;
int count=1;
while (top>=0 && obj->data[top][0]<= price)
count+= obj->data[top--][1];

obj->top= ++top;
obj->data[top][0]= price;
obj->data[top][1]= count;
return count;
}

void stockSpannerFree(StockSpanner* obj) {
free(obj);
return ;
}


笨笨Q的慢速解XD (面試官表示:這麼直白的寫法誰不會啊~不錄用!!!XD)

typedef struct {
int stock[10000];
int top;
} StockSpanner;


StockSpanner* stockSpannerCreate() {
StockSpanner* stock = malloc (sizeof( StockSpanner));
stock->top = -1;
return stock;
}

int stockSpannerNext(StockSpanner* obj, int price) {
int top = obj->top;
obj->stock[++top] = price;
obj->top = top;
int count=0;
while (top>=0 && obj->stock[top--]<= price)
count++;
return count;
}

void stockSpannerFree(StockSpanner* obj) {
free(obj);
return ;
}

/**
* Your StockSpanner struct will be instantiated and called as such:
* StockSpanner* obj = stockSpannerCreate();
* int param_1 = stockSpannerNext(obj, price);
* stockSpannerFree(obj);
*/

沒有留言:

張貼留言