当前位置: 首页 > news >正文

滑动窗口最大值和前K个高频元素

滑动窗口最大值和前K个高频元素

239. 滑动窗口最大值

核心:建立一个单调队列,维护里面的最大值,并且从大到小的顺序即可!【只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。
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 maxSlidingWindow1(self, nums: List[int], k: int) -> List[int]:que = MyQueue()result = []for i in range(k):que.push(nums[i])result.append(que.front())for i in range(k,len(nums)):# 滑动窗口移除到最前面元素que.pop(nums[i - k])# 滑动窗口前加入最后的元素que.push(nums[i])result.append(que.front())return resultdef maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:# 自己实现单调队列que = []result = []for i in range(k):while que and que[-1] < nums[i]:que.pop(-1) # list.pop()时间复杂度是o(N) 这里会超时que.append(nums[i])result.append(que[0])for i in range(k,len(nums)):if que and que[0] == nums[i - k]:que.pop(0)while que and que[-1] < nums[i]:que.pop(-1)que.append(nums[i])result.append(que[0])return result

347. 前 K 个高频元素

核心:利用字典排序的一些方法!这些方法比较解题关键!
第一种
f = zip(d.keys(), d.values())
c =sorted(f)
第二种
a = sorted(d.items(), key=lambda x: x[1])
a1 = sorted(d.items(),key = lambda x:x[1],reverse = True)
import heapq
class Solution:def topKFrequent1(self, nums: List[int], k: int) -> List[int]:dict_1 = {}res = []for v in nums:if v in dict_1:dict_1[v] += 1else:dict_1[v] = 1a1 = sorted(dict_1.items(),key = lambda x:x[1],reverse = True)# print(a1)for i in a1[:k]:res.append(i[0])return res# 使用堆来实现def topKFrequent(self, nums: List[int], k: int) -> List[int]:map_ = {}# 统计元素出现的频率for i in range(len(nums)):map_[nums[i]] = map_.get(nums[i], 0) + 1 # 对map进行排序# 定义一个小顶堆 大小为kpri_que = []for key, value in map_.items():heapq.heappush(pri_que, (value, key))if len(pri_que) > k: # 如果堆的大小大于了K 则队列弹出,保证对大小为kheapq.heappop(pri_que)result = [0] * kfor i in range(k - 1, -1, -1):result[i] = heapq.heappop(pri_que)[1]return result
http://www.lryc.cn/news/258958.html

相关文章:

  • C语言实现在顺序表中找到最大值
  • 数字工厂管理系统建设层级分为哪几层
  • MySQL 8 update语句更新数据表里边的数据
  • 可视化监控云平台/智能监控平台EasyCVR国标设备开启音频没有声音是什么原因?
  • L1-039:古风排版
  • 树莓派新手装机指南
  • flink使用事件时间时警惕kafka不同分区的事件时间倾斜问题
  • 『App自动化测试之Appium基础篇』| Desired Capabilities详解与使用
  • vscode插件webview和插件通信
  • 【STM32单片机】贪吃蛇游戏设计
  • 【Java 基础】32 定时调度
  • C++ 教程 - 02 复合数据类型
  • 【数据处理】NumPy数组的合并操作,如何将numpy数组进行合并?
  • JavaScript实现飘窗功能
  • Docker笔记:容器转换成镜像,导出导入镜像,数据拷贝,查看日志
  • 串行计时芯片D1380/D1381,2.0V~5.5V 工作电流: 2V时 与TTL 兼容,采用DIP8、SOP8封装
  • 中间件系列 - Redis入门到实战(基础篇)
  • 项目经理和产品经理该如何选择?
  • java WebSocket带参数处理使用
  • OkHttp: 拦截器和事件监听器
  • 总结一些vue3小知识2
  • 【Excel设置动态图表】
  • 用 C 写一个卷积神经网络
  • 直面双碳目标,优维科技携手奥意建筑打造绿色低碳建筑数智云平台
  • docker 基础入门
  • HarmonyOS:NativeWindow 开发指导
  • 汉威科技传感器为农业加点“智慧”
  • springboot listener、filter登录实战
  • 【数据结构—栈的实现(数组栈)】
  • Linux安装Halo(个人网站)