本文最后更新于:2022年11月30日 下午
题目描述
思路及实现
借助Counter类及其方法
这是我一开始想到的思路,毕竟是python,能借就借嘛。Counter
就能够统计每个元素出现的次数,而most_common
方法又能够把频率最高的找出来,这不就显而易见出答案了嘛~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class FreqStack:
def __init__(self): self.stack = list() self.cnt = Counter()
def push(self, val: int) -> None: self.stack.append(val) self.cnt[val] += 1
def pop(self) -> int: tmp_list = self.cnt.most_common() num_list = [] frequecy = tmp_list[0][1] for t in tmp_list: if t[1] == frequecy: num_list.append(t[0]) else: break for i in range(len(self.stack) - 1, -1, -1): if self.stack[i] in num_list: self.cnt[self.stack[i]] -= 1 return self.stack.pop(i)
|
OK,超时了,很符合我对偷懒下场的想象。那就只好另起炉灶了。
依旧借助Counter类,但是利用频率栈
思路来源:灵神
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class FreqStack:
def __init__(self): self.stacks: List[List[int]] = list() self.cnt: Counter = Counter()
def push(self, val: int) -> None: if self.cnt[val] == len(self.stacks): self.stacks.append([val]) else: self.stacks[self.cnt[val]].append(val) self.cnt[val] += 1
def pop(self) -> int: val = self.stacks[-1].pop() if not self.stacks[-1]: self.stacks.pop() self.cnt[val] -= 1 return val
|
希望本文章能够帮到您~