【LeetCode】堆 heap(共31题)

【23】 Merge k Sorted Lists

【215】 Kth Largest Element in an Array (无序数组中最小/大的K个数)

给了一个无序数组,可能有重复数字,找到第 k 个最大的元素并且返回这个元素值。

题解:直接用直接用个堆保存数组中最大的 K 个数。时间复杂度是 O(NlogK)。

 1 //时间复杂度是 O(NlogK), 用堆辅助。
 2 class Solution {
 3 public:
 4     int findKthLargest(vector<int>& nums, int k) {
 5         const int n = nums.size();
 6         priority_queue<int, vector<int>, greater<int>> pq;
 7         for (int i = 0; i < n; ++i) {
 8             if (pq.size() < k) {
 9                 pq.push(nums[i]);
10             } else {
11                 if (pq.top() < nums[i]) {
12                     pq.pop();
13                     pq.push(nums[i]);
14                 }
15             }
16         }
17         return pq.top();
18     }
19 };

本题可以有 O(N) 的解法,详见《剑指offer》或者《程序员代码面试指南》P336

【218】 The Skyline Problem

【239】 Sliding Window Maximum

【253】 Meeting Rooms II

【264】 Ugly Number II

【295】 Find Median from Data Stream

【313】 Super Ugly Number

【347】 Top K Frequent Elements

【355】 Design Twitter

【358】 Rearrange String k Distance Apart

【373】 Find K Pairs with Smallest Sums

【378】 Kth Smallest Element in a Sorted Matrix

【407】 Trapping Rain Water II

【451】 Sort Characters By Frequency

【502】 IPO

【659】 Split Array into Consecutive Subsequences

【692】 Top K Frequent Words

【703】 Kth Largest Element in a Stream

给个数字流,总是返回最大的第K个元素

解法就是用一个只有K个元素的堆,维护这这些数字里面从最大的第K个到最大的元素。

[最小元素...第K大的元素..最大元素], 这个堆总维护后半段的K个

【719】 Find K-th Smallest Pair Distance

【743】 Network Delay Time

【759】 Employee Free Time

【767】 Reorganize String

【778】 Swim in Rising Water

【786】 K-th Smallest Prime Fraction

【787】 Cheapest Flights Within K Stops

【818】 Race Car

【857】 Minimum Cost to Hire K Workers

【864】 Shortest Path to Get All Keys

【871】 Minimum Number of Refueling Stops

【882】 Reachable Nodes In Subdivided Graph

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }

原文地址:https://www.cnblogs.com/zhangwanying/p/9357141.html

时间: 2024-10-10 05:55:11

【LeetCode】堆 heap(共31题)的相关文章

LeetCode OJ Linked List: 138题、109题和191题

138题:Copy List with Random Pointer 题目分析: 本题思路1:第一步,你需要遍历一下链表,对于每个结点,你都new出一个连接在其后面.第二步,调整random指针.第三步,把复制的链表与原链表断开.时间复杂度O(N),空间复杂度O(1). 本题思路2:第一步,仍需要遍历一下链表,对于每个结点都new出一个节点,但不连接在其后面,把这种旧节点到新结点的映射关系,存储在map中.第二步,调整random指针.时间复杂度O(N),空间复杂度O(N). 本题思路3:第一步

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助.废话不想讲了.入主题:先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身栈区:1.每个线程包含一个栈区,栈中只保存基础数

.NET中的堆(Heap)和栈(Stack)的本质

计算机的内存可以分为代码块内存,Stack内存和Heap内存.代码块内存是在加载程序时存放程序机器代码的地方. 栈(Stack)一般存放函数内的局部变量. 堆(Heap)一般存放全局变量和类对象实例等. 若只是声明一个对象,则先在栈内存中为其分配地址空间,若再实例化它,则在堆内存中为其分配空间. 1.Stack VS Heap 由于计算机的内存分配过程比较抽象,下面举一个简单的程序片段,来图解和谐步骤对Stack和Heap内存的影响: 下面的StackVsHeap类有一个Person类和Fun1

Java里的堆(heap)栈(stack)和方法区(method)

基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收.   引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 . 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收.局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收. 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配.

【数据结构】堆heap

本节研究堆heap的相关操作实现: 堆 说明几点 (1)堆分为大根堆和小根堆:大根堆的根为最大值,每一个节点的值都不小于其孩子的值: (2)可以利用大根堆实现升序排序:主要是利用大根堆的头和需要排序的最后一个数字交换的思想: (3)使用大根堆实现最大优先级队列,类似stl中queue的操作,只是对于元素在队列中的元素优先级是不一样的,在最大优先级中,队列头为值最大元素:可利用大根堆来维护一个最大优先级队列:向优先级队列中push元素,类似像堆的末尾添加一个元素,然后使用_makeHeapUp寻找

堆(heap)和栈(stack)几点认识

堆(heap)和栈(stack)主要的区别由以下几点:1.管理方式不同:2.空间大小不同:3.产生碎片不同:4.生长方向不同:5.分配归属不同:6.分配效率不同:7.存取效率不同:管理方式:对于栈来讲,释放是由程序自动管理,无需在程序中手工控制:对于堆来说,释放工作由程序员控制,容易产生memory leak.产生碎片:对于堆来讲,频繁的new/delete,malloc/free势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低.对于栈来讲,则不会存在这个问题,因为栈是先进后出的队

iOS数据存储类型 及 堆(heap)和栈(stack)

iOS数据存储类型 及 堆(heap)和栈(stack) 一般认为在c中分为这几个存储区: 1栈 --  由编译器自动分配释放. 2堆 --  一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收. 3全局区(静态存储区)-- 全局变量和静态变量的存储是放在一块区域 ,程序退出后自动释放 .全局区又分为全局初始化区和全局未初始化区.初始化的全局变量和静态变量存放在全局初始化区,未初始化的全局变量和未初始化的静态变量存放在相邻的另一块区域. 4常量区-- 专门放数字/字符常量的地方, 程

堆heap和栈Stack(百科)

堆heap和栈Stack 在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场.要点:堆,队列优先,先进先出(FIFO—first in first out)[1]  .栈,先进后出(FILO—First-In/Last-Out). 目录 1 简介 2 对比分析 ? 堆栈空间分配 ? 堆栈缓存方式 ? 堆栈

(转)堆heap和栈stack

一 英文名称 堆和栈是C/C++编程中经常遇到的两个基本概念.先看一下它们的英文表示: 堆――heap 栈――stack 二 从数据结构和系统两个层次理解 在具体的C/C++编程框架中,这两个概念并不是并行的.深入到汇编级进行研究就会发现,栈是机器系统提供的数据结构,而堆是由C/C++函数库提供的.这两个概念可以从数据结构和系统两个层次去理解: 1.从数据结构层次理解,栈是一种先进后出的线性表,只要符合先进后出的原则的线性表都是栈.至于采用的存储方式(实现方式)是顺序存储(顺序栈)还是链式存储(