Leetcode 3.26

Leetcode Hot 100

  • 一级目录
    • 1.每日温度
    • 1.数组中的第K个最大元素
      • 知识点:排序复杂度
      • 知识点:堆的实现
    • 2.前 K 个高频元素
      • 知识点:优先队列

一级目录

1.每日温度

每日温度
思路是维护一个递减栈,存储的是当前元素的位置。

  1. 遍历整个数组,如果栈不空,且当前数字大于栈顶元素,那么需要pop出栈顶元素,由于当前数字大于栈顶元素的数字,而且一定是第一个大于栈顶元素的数,直接求出下标差就是二者的距离。
  2. 继续看新的栈顶元素,重复步骤一,直到当前数字小于等于栈顶元素停止,然后将数字入栈,这样就可以一直保持递减栈,且每个数字和第一个大于它的数的距离也可以算出来。

step 1:
在这里插入图片描述
step 2:
在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> stk;//都置为0,处理边界情况vector<int> ans(temperatures.size(), 0);for (int i = 0; i < temperatures.size(); i++) {if (stk.empty()) {//为空则直接入栈,存储的是元素的位置stk.push(i);} else {//比栈顶元素大while (!stk.empty() && temperatures[i] > temperatures[stk.top()]) {//栈顶元素出栈auto site = stk.top();stk.pop();//记录差值ans[site] = i - site;}//当前元素入栈stk.push(i);}}return ans;}
};

1.数组中的第K个最大元素

数组中的第K个最大元素
第K个最大元素用堆做比较容易,可以维护一个只有K个元素的大根堆,如果元素个数超过K则pop,也就是将堆顶大元素删除,那么当前堆就是一个以第K大元素为堆顶的大根堆。堆可以用priority_queue实现。

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {priority_queue<int, vector<int>, greater<int>> pq;for (auto &n : nums) {pq.push(n);while (pq.size() > k) {pq.pop();}}return pq.top();}
};

知识点:排序复杂度

各种排序的复杂度需要烂熟于心:
在这里插入图片描述

知识点:堆的实现

当然在面试中,面试官更倾向于让更面试者自己实现一个堆。所以建议掌握这里大根堆的实现方法,在这道题中尤其要搞懂「建堆」、「调整」和「删除」的过程。

class Solution {
public:void maxHeapify(vector<int>& a, int i, int heapSize) {int l = i * 2 + 1, r = i * 2 + 2, largest = i;if (l < heapSize && a[l] > a[largest]) {largest = l;} if (r < heapSize && a[r] > a[largest]) {largest = r;}if (largest != i) {swap(a[i], a[largest]);maxHeapify(a, largest, heapSize);}}void buildMaxHeap(vector<int>& a, int heapSize) {for (int i = heapSize / 2; i >= 0; --i) {maxHeapify(a, i, heapSize);} }int findKthLargest(vector<int>& nums, int k) {int heapSize = nums.size();buildMaxHeap(nums, heapSize);for (int i = nums.size() - 1; i >= nums.size() - k + 1; --i) {swap(nums[0], nums[i]);--heapSize;maxHeapify(nums, 0, heapSize);}return nums[0];}
};

2.前 K 个高频元素

前 K 个高频元素

  1. 将数组放入unorderd_map<int, int> mp中,记录各元素对应出现的次数
  2. 将mp中的次数堆排,按照大根堆排序
  3. 最终将前K个元素放入vector中

知识点:优先队列

本题难点在于priority_queue的相关知识,如何自定义比较方式等。比如本题的数据类型并不是基本数据类型,而是pair<int, int>,所以需要自定义比较方式

        struct myComparision {bool operator() (pair<int, int> &p1, pair<int, int> &p2) {return p1.second < p2.second;}};

代码实现:

class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int, int>mp;vector<int> ans;for (auto& n: nums) {mp[n]++;}//用仿函数自定义比较方式,大根堆是小于struct myComparision {bool operator() (pair<int, int> &p1, pair<int, int> &p2) {return p1.second < p2.second;}};priority_queue <pair<int, int>, vector<pair<int, int>>, myComparision> pq;for (auto &a: mp) {pq.push(a);}while (k--) {ans.push_back(pq.top().first);pq.pop();}return ans;}};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宁波中墙建材预制混凝土模板、铝合金模板、方木有啥区别?可送奉化鄞州海曙慈溪杭州湾前湾北仑

宁波中墙建材预制混凝土模板、铝合金模板、方木有啥区别&#xff1f;可送奉化鄞州海曙慈溪杭州湾前湾北仑 预制混凝土模板、铝合金模板和方木是三种不同的建筑模板材料&#xff0c;它们各自拥有独特的特性和用途。 预制混凝土模板&#xff1a;这种模板通常是由工厂预制的混凝土…

LeetCode-热题100:34. 在排序数组中查找元素的第一个和最后一个位置

题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1…

各种编程语言的优缺点

当谈论编程语言时&#xff0c;我们进入了一个充满激情和争议的领域。每种编程语言都有其独特的优点和局限性&#xff0c;适用于不同的场景。让我们简要评价一些主流编程语言&#xff0c;探讨它们的优缺点和应用领域。 来来来,老铁们,男人女人都需要的技术活 拿去不谢:远程调试,…

LeetCode-热题100:33. 搜索旋转排序数组

题目描述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], n…

第三十四章 配置服务器访问

文章目录 第三十四章 配置服务器访问添加应用程序路径应用程序路径配置参数 第三十四章 配置服务器访问 本页介绍如何配置 网关连接的应用程序。对于这些配置任务&#xff0c;可以使用 Web Gateway 管理页面。其他文章介绍了如何配置默认设置和服务器。 每个Web 应用程序都必…

Ubuntu 下统计文件数量的命令

参考:https://blog.csdn.net/kxh123456/article/details/123811580 查看当前目录下的文件数量&#xff08;不包含子目录中的文件&#xff09; ls -l|grep "^-"| wc -l实例展示&#xff1a;如下图所示&#xff0c;当前路径下&#xff0c;有2个json文件和2个文件夹&a…

CMC学习系列 (1):EEG-EMG相干性均局限于对侧,同侧无显著相干性

CMC学习系列:EEG-EMG相干性均局限于对侧&#xff0c;同侧无显著相干性 0. 引言1. 主要贡献2. 方法和结果2.1 EEG-EMG相干谱2.2 EEG-EMG相干性地形图2.3 3种任务受影响侧与未受影响侧的一致性比较 3. 讨论和结论4. 总结欢迎来稿 论文地址&#xff1a;https://www.ahajournals.or…

函数进阶-Python

师从黑马程序员 函数中多个返回值的接收 def test_return():return 1,"hello",3x,y,ztest_return() print(x) print(y) print(z) 多种参数的使用 函数参数种类 位置参数 关键字参数 def user_info(name,age,gender):print(f"姓名是{name},年龄是:{age},性别是…

SublimtText修改远程机器文件

Sublime Text 本身并不强大&#xff0c;但是它方便使用插件扩展功能&#xff0c;所以变得很强大。今天介绍一个很实用的插件 SFTP &#xff0c;可以大大提高前端工作效率。 SFTP 安装 1. 打开 Sublime Text 2. 快捷键 shift ctrl p 键&#xff0c;呼出面板 3. 使用 Packag…

【深度学习】最强算法模型之:潜在狄利克雷分配(LDA)

潜在狄利克雷分配 1、引言2、潜在狄利克雷分配2.1 定义2.2 原理2.3 算法公式2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 给我讲一讲LDA 小鱼&#xff1a;LDA&#xff1f; 你指的是&#xff1f; 小屌丝&#xff1a;就是算法模型的LDA啊&#xff0c; 你…

每天学习一个Linux命令之uptime

每天学习一个Linux命令之uptime Uptime命令是一个在Linux系统中用于查看系统运行时间和当前负载的工具。它提供了关于系统运行时间的信息&#xff0c;包括开机时间、平均负载的变动等。本篇博客将详细介绍uptime命令以及其所有可用的选项。 什么是uptime命令&#xff1f; Up…

【linux深入剖析】基础IO操作 | 使用Linux库函数实现读写操作 | 文件相关系统调用接口

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1.复习C文件IO相关操…

双亲委派机制总结

回顾了一下双亲委派机制&#xff0c;在这记录记录&#xff0c;下一篇会基于打破双亲委派机制来更新 1. 类加载&#xff1a; 多个java文件经过编译打包后生成可运行jar包&#xff0c;最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类&a…

2012r2安装mse

MSEinstall.exe /disableoslimit 在Windows 2012 R2上安装微软官方免费杀毒软件MSE(Microsoft Security Essentials) - 李家麒博客How To Install Microsoft Security Essentials In Windows Server 2012 R2

【Python】搭建 Python 环境

目 录 一.安装 Python二.安装 PyCharm 要想能够进行 Python 开发&#xff0c;就需要搭建好 Python 的环境 需要安装的环境主要是两个部分&#xff1a; 运行环境: Python开发环境: PyCharm 一.安装 Python (1) 找到官方网站 (2) 找到下载页面 选择 “Download for Windows”…

最小割问题合集,最大权闭合图,最大密度子图,最小权点覆盖,最大权独立子图,OJ练习,代码详解

文章目录 零、回顾1、流网络的割2、最小割问题 一、最小割的应用1.1POJ1966 -- Cable TV Network1.1.1原题链接1.1.2思路分析1.1.3AC代码 1.2ZOJ 2676 Network Wars1.2.1原题链接1.2.2思路分析1.2.3AC代码 1.3OPTM - Optimal Marks1.3.1原题链接1.3.2思路分析1.3.3AC代码 二、最…

QML | JavaScript作用域和命名解析2

QML | JavaScript作用域和命名解析3.绑定的作用域对象 属性绑定是QML中最常见的JavaScript应用。属性绑定关联了一个JavaScript表达式的结果和对象的一个属性,该属性所归属的对象被称为绑定的作用域对象。在下面的代码中,Item对象就是一个绑定的作用域对象: ​ 绑定可以…

JavaScript Uncaught ReferenceError: WScript is not defined

项目场景&#xff1a; 最近在Visual Studio 2019上编译libmodbus库&#xff0c;出现了很多问题&#xff0c;一一解决特此记录下来。 问题描述 首先就是configure.js文件的问题&#xff0c;它会生成两个很重要的头文件modbus_version.h和config.h&#xff0c;这两个头文件其中…

【Web APIs】正则表达式

目录 1.正则表达式 2.正则表达式语法 3.元字符 3.1边界符 3.2量词 3.3字符类 4.修饰符 1.正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是用于匹配字符串中字符组合的模式&#xff0c;在 JavaScript中&#xff0c;正则表达式也是对象。通常用来查…

主流公链 - Solana

探索Solana区块链&#xff1a;下一代高性能区块链平台 1. Solana简介 Solana是一个高性能的区块链平台&#xff08;TPS能达到10W级别&#xff09;&#xff0c;旨在实现高吞吐量和低延迟的区块链交易处理。它采用了一系列创新技术&#xff0c;其中包括Proof of History (PoH)&a…