leetcode 895最大頻率棧

2021-10-09 10:51:01 字數 1922 閱讀 6639

實現 freqstack,模擬類似棧的資料結構的操作的乙個類。

freqstack 有兩個函式:

push(int x),將整數 x 推入棧中。

pop(),它移除並返回棧**現最頻繁的元素。

如果最頻繁的元素不只乙個,則移除並返回最接近棧頂的元素。

示例:輸入:

[「freqstack」,「push」,「push」,「push」,「push」,「push」,「push」,「pop」,「pop」,「pop」,「pop」],

[,[5],[7],[5],[7],[4],[5],,,,]

輸出:[null,null,null,null,null,null,null,5,7,5,4]

解釋:執行六次 .push 操作後,棧自底向上為 [5,7,5,7,4,5]。然後:

pop() -> 返回 5,因為 5 是出現頻率最高的。

棧變成 [5,7,5,7,4]。

pop() -> 返回 7,因為 5 和 7 都是頻率最高的,但 7 最接近棧頂。

棧變成 [5,7,5,4]。

pop() -> 返回 5 。

棧變成 [5,7,4]。

pop() -> 返回 4 。

棧變成 [5,7]。

對 freqstack.push(int x) 的呼叫中 0 <= x <= 10^9。

如果棧的元素數目為零,則保證不會呼叫 freqstack.pop()。

單個測試樣例中,對 freqstack.push 的總呼叫次數不會超過 10000。

單個測試樣例中,對 freqstack.pop 的總呼叫次數不會超過 10000。

所有測試樣例中,對 freqstack.push 和 freqstack.pop 的總呼叫次數不會超過 150000。

很簡單的思路:

【【】,【】,【】,【】…】出現頻率1,2,3,4…的集合,每次刪除從最後乙個集合中刪除元素,新增元素的時候放入正確頻率的小集合當中

class

freqstack

:def

__init__

(self)

: self.datas =

defpush

(self, x:

int)

->

none

:if self.datas is

none

: temp =

[x]else

: temp =

false

for i in

range(0

,len

(self.datas)):

if x not

in self.datas[i]

: self.datas[i]

temp =

true

break

ifnot temp:

[x])

defpop

(self)

->

int:

ifnot self.datas[

len(self.datas)-1

]:self.datas.pop(-1

)return self.datas[

len(self.datas)-1

].pop(-1

)# your freqstack object will be instantiated and called as such:

# obj = freqstack()

# obj.push(x)

# param_2 = obj.pop()

leetcode 895 最大頻率棧

題目描述 實現 freqstack,模擬類似棧的資料結構的操作的乙個類。freqstack 有兩個函式 push int x 將整數 x 推入棧中。pop 它移除並返回棧 現最頻繁的元素。如果最頻繁的元素不只乙個,則移除並返回最接近棧頂的元素。示例 輸入 freqstack push push pu...

leetcode5225最大相等頻率

正整數陣列nums,找到滿足條件的最長字首,返回其長度。該字首滿足 刪除乙個元素後,剩下的每個數字出現的次數相同。ps 如果刪除後沒有元素存在,也可以認為每個數字有相同的次數。陣列長度 2,105 元素值 2,105 在遍歷陣列的過程中,計算每個數字的頻率對映val2freq,再統計頻率的頻率。對於...

LeetCode1224 最大相等頻率 思維

給出乙個正整數陣列 nums,請你幫忙從該陣列中找出能滿足下面要求的 最長 字首,並返回其長度 從字首中 刪除乙個 元素後,使得所剩下的每個數字的出現次數相同。如果刪除這個元素後沒有剩餘元素存在,仍可認為每個數字都具有相同的出現次數 也就是 0 次 示例 1 輸入 nums 2,2,1,1,5,3,...