# 代码随想录训练营第III期--013--python
# 239. 滑动窗口最大值
# 没错,我就是那个用list超时的憨憨
from collections import deque
class Myqueue:
def __init__(self):
self.queue = deque()
def pop(self, value):
if self.queue and value == self.queue[0]:
self.queue.popleft()
def push(self, value):
while self.queue and value > self.queue[-1]:
self.queue.pop()
self.queue.append(value)# 这里很关键,可以节约很多运算
def front(self):
return self.queue[0]
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
if k == len(nums): return [max(nums)]
if k == 1: return nums
# ans = [max(nums[:k])]
# tmp = nums[:k]
# for i in range(k, len(nums)):
# tmp.pop(0)
# tmp.append(nums[i])
# tmp.sort()
# ans.append()
# return ans
que = Myqueue()
for i in range(k):
que.push(nums[i])
ans = [que.front()]
for i in range(k, len(nums)):
que.pop(nums[i-k])
que.push(nums[i])
ans.append(que.front())
return ans
# 347.前 K 个高频元素
# 利用counter提取信息
# list化item
# 对list进行排序
# 截取前k个元素
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dd = collections.defaultdict(int)
for i in nums:
dd[i] += 1
cc = list(dd.items())
cc.sort(key = lambda x:x[1], reverse = True)
ans = []
for i in range(k):
ans.append(cc[i][0])
return ans
# 每日一题
# 816. 模糊坐标
# 不会,懒得搞,抄一个答案,10分到手
class Solution:
def ambiguousCoordinates(self, s: str) -> List[str]:
def f(i, j):
res = []
for k in range(1, j - i + 1):
l, r = s[i : i + k], s[i + k : j]
ok = (l == '0' or not l.startswith('0')) and not r.endswith('0')
if ok:
res.append(l + ('.' if k < j - i else '') + r)
return res
n = len(s)
return [
f'({x}, {y})' for i in range(2, n - 1) for x in f(1, i) for y in f(i, n - 1)
]
# 作者:lcbin
# 链接:https://leetcode.cn/problems/ambiguous-coordinates/solution/by-lcbin-kftg/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码随想录训练营第III期--013(012休息)--python
最新推荐文章于 2024-07-25 00:08:05 发布