LeetcodeMedium-【901.株価スパン】

特定の株の毎日の相場を収集し、株の現在の価格の範囲を返すStockSpannerクラスを記述します。

今日の株価の範囲は、株価が今日の価格以下である連続した日数の最大値として定義されます(今日から今日までを含む)。

たとえば、今後7日間の株価が[100、80、60、70、60、75、85]の場合、株価スパンは[1、1、1、2、1、4、6]になります。

 

例:

入力:["StockSpanner"、 "next"、 "next"、 "next"、 "next"、 "next"、 "next"、 "next"]、[[]、[100]、[80]、[60 ]、[70]、[60]、[75]、[85]]
出力:[null、1、1、1、1、2、1、4、6 ]
説明:
最初に、S = StockSpanner()を初期化し、次に:
S.next(100)が呼び出されて1を返す
S.next(80)が呼び出されて1を返す
S.next(60)が呼び出されて1を返す
S.next(70)が呼び出されて2を返す
S next(60)が呼び出されて1を返す
S.next(75)が呼び出されて4を返す
S.next(85)が呼び出されて6を返す

(たとえば)S.next(75)は4を返します。これは、今日の最新の4つの価格
(今日の価格75を含む)が今日の価格以下であるためです。

 

ヒント:

StockSpanner.next(int price)を呼び出すと、1 <= price <= 10 ^ 5になります。
各テストケースは、最大10,000回までStockSpanner.nextを呼び出すことができます。
すべてのテストケースで、StockSpanner.nextは最大150,000回呼び出されます。
この問題の合計時間制限は50%削減されました。

出典:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/online-stock-span
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

アイデア:2つのスタックを使用して記録し、増加するスタックスタックは以前の価格を記録し、もう1つのスタックcntは以前のスタックの要素に対応する回数を記録します。Nextが取得されるたびに、現在の価格以下の値がスタックにあるかどうかがチェックされ、ある場合はスタックがポップされ、対応する回数が価格統計の回数に追加されます。これはループで判断されます。

class StockSpanner:

    def __init__(self):
        self.stact = []        
        self.cnt = []

    def next(self, price: int) -> int:
        ct = 1
        while self.stact != [] and price >= self.stact[-1]:
            ct += self.cnt[-1]
            self.stact.pop()
            self.cnt.pop()
        self.stact.append(price)
        self.cnt.append(ct)
        return ct


# Your StockSpanner object will be instantiated and called as such:
# obj = StockSpanner()
# param_1 = obj.next(price)

 

公開された314元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39451578/article/details/105192762