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

宿迁做网站建设的公司新浪网页版登录

宿迁做网站建设的公司,新浪网页版登录,wordpress加入音乐,多用户商城系统下载文章目录 一、数组中的第 K 个最大元素(题目 215)1. 题目描述2. 示例3. 解题思路4. 代码实现(Java)5. 复杂度分析 二、前 K 个高频元素(题目 347)1. 题目描述2. 示例3. 解题思路4. 代码实现(Jav…

文章目录

    • 一、数组中的第 K 个最大元素(题目 215)
      • 1. 题目描述
      • 2. 示例
      • 3. 解题思路
      • 4. 代码实现(Java)
      • 5. 复杂度分析
    • 二、前 K 个高频元素(题目 347)
      • 1. 题目描述
      • 2. 示例
      • 3. 解题思路
      • 4. 代码实现(Java)
      • 5. 复杂度分析
    • 三、数据流的中位数(题目 295)
      • 1. 题目描述
      • 2. 示例
      • 3. 解题思路
      • 4. 代码实现(Java)
      • 5. 复杂度分析

在力扣(LeetCode)平台上,堆相关的题目是算法面试和练习中的重要部分。今天,我们就来详细解析堆专题中的几道经典题目,帮助大家更好地理解解题思路和技巧。

一、数组中的第 K 个最大元素(题目 215)

1. 题目描述

给定一个整数数组 nums 和一个整数 k,找到数组中的第 k 个最大元素。

2. 示例

示例 1:

输入:nums = [3, 2, 1, 5, 6, 4], k = 2

输出:5

3. 解题思路

这道题主要考察堆的应用。我们可以使用一个大小为 k 的小顶堆来维护前 k 个最大元素。具体步骤如下:

  1. 构建一个大小为 k 的小顶堆。
  2. 遍历数组,将前 k 个元素放入堆中。
  3. 继续遍历数组,对于每个元素,如果它大于堆顶元素,则替换堆顶元素并调整堆。
  4. 最后,堆顶元素即为第 k 个最大元素。

4. 代码实现(Java)

import java.util.PriorityQueue;public class Solution {public int findKthLargest(int[] nums, int k) {PriorityQueue<Integer> heap = new PriorityQueue<>(k);for (int i = 0; i < k; i++) {heap.add(nums[i]);}for (int i = k; i < nums.length; i++) {if (nums[i] > heap.peek()) {heap.poll();heap.add(nums[i]);}}return heap.peek();}
}

5. 复杂度分析

  • 时间复杂度 :O(n log k),其中 n 是数组的长度。构建堆的时间复杂度为 O(k),后续每次调整堆的时间复杂度为 O(log k),总共需要调整 n - k 次。
  • 空间复杂度 :O(k),需要使用一个大小为 k 的堆。

二、前 K 个高频元素(题目 347)

1. 题目描述

给定一个非空的整数数组 nums,返回出现频率最高的前 k 个元素。

2. 示例

示例 1:

输入:nums = [1, 1, 1, 2, 2, 3], k = 2

输出:[1, 2]

3. 解题思路

这道题主要考察堆的应用。我们可以使用一个哈希表来统计每个元素的频率,然后使用一个大小为 k 的小顶堆来维护前 k 个高频元素。具体步骤如下:

  1. 使用哈希表统计每个元素的频率。
  2. 构建一个大小为 k 的小顶堆。
  3. 遍历哈希表,将元素按频率放入堆中。
  4. 如果堆的大小超过 k,则弹出堆顶元素。
  5. 最后,堆中的元素即为前 k 个高频元素。

4. 代码实现(Java)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;public class Solution {public List<Integer> topKFrequent(int[] nums, int k) {Map<Integer, Integer> frequencyMap = new HashMap<>();for (int num : nums) {frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);}PriorityQueue<Map.Entry<Integer, Integer>> heap = new PriorityQueue<>((a, b) -> a.getValue() - b.getValue());for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {heap.add(entry);if (heap.size() > k) {heap.poll();}}List<Integer> result = new ArrayList<>();while (!heap.isEmpty()) {result.add(heap.poll().getKey());}return result;}
}

5. 复杂度分析

  • 时间复杂度 :O(n log k),其中 n 是数组的长度。统计频率的时间复杂度为 O(n),后续每次调整堆的时间复杂度为 O(log k),总共需要调整 n 次。
  • 空间复杂度 :O(n + k),需要使用哈希表存储频率,堆的大小为 k。

三、数据流的中位数(题目 295)

1. 题目描述

设计一个数据结构,能够高效地添加整数和找到当前所有元素的中位数。

2. 示例

示例 1:

输入:

["MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"]
[[], [1], [2], [], [3], []]

输出:

[null, null, null, 1.5, null, 2.0]

3. 解题思路

这道题主要考察堆的应用。我们可以使用两个堆来维护数据流的中位数。具体步骤如下:

  1. 使用一个大顶堆 maxHeap 存储较小的一半元素,使用一个小顶堆 minHeap 存储较大的一半元素。
  2. 添加元素时,根据元素大小决定放入哪个堆,并保持两个堆的大小平衡。
  3. 当两个堆的大小相等时,中位数是两个堆顶元素的平均值;当大小不等时,中位数是较大堆的堆顶元素。

4. 代码实现(Java)

import java.util.PriorityQueue;public class MedianFinder {private PriorityQueue<Integer> maxHeap;private PriorityQueue<Integer> minHeap;public MedianFinder() {maxHeap = new PriorityQueue<>((a, b) -> b - a);minHeap = new PriorityQueue<>();}public void addNum(int num) {if (maxHeap.isEmpty() || num <= maxHeap.peek()) {maxHeap.add(num);} else {minHeap.add(num);}if (maxHeap.size() > minHeap.size() + 1) {minHeap.add(maxHeap.poll());} else if (minHeap.size() > maxHeap.size()) {maxHeap.add(minHeap.poll());}}public double findMedian() {if (maxHeap.size() == minHeap.size()) {return (maxHeap.peek() + minHeap.peek()) / 2.0;} else {return maxHeap.peek();}}
}

5. 复杂度分析

  • 时间复杂度 :每次添加元素的时间复杂度为 O(log n),其中 n 是当前元素的数量。查找中位数的时间复杂度为 O(1)。
  • 空间复杂度 :O(n),需要使用两个堆存储所有元素。

以上就是力扣热题 100 中与堆相关的经典题目的详细解析,希望对大家有所帮助。在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。在这里插入图片描述


文章转载自:

http://M7XgTUqb.qygLt.cn
http://KPYQIwQq.qygLt.cn
http://sIzDcUZm.qygLt.cn
http://T0bZCdNZ.qygLt.cn
http://egrrw0B0.qygLt.cn
http://nKdEGVJP.qygLt.cn
http://zokUoE4d.qygLt.cn
http://0iQRYcfJ.qygLt.cn
http://ld71lfKj.qygLt.cn
http://fz5ZO2iW.qygLt.cn
http://qOpjdC4V.qygLt.cn
http://PR1pTeHt.qygLt.cn
http://Cq0hMnAd.qygLt.cn
http://Dc7AqTPM.qygLt.cn
http://aSWgIzTl.qygLt.cn
http://aiHGAPCs.qygLt.cn
http://xkFhxnBN.qygLt.cn
http://C3bvnrZK.qygLt.cn
http://Nk52fV7x.qygLt.cn
http://55NFqYhG.qygLt.cn
http://smF8k0Ar.qygLt.cn
http://dJjdzhcz.qygLt.cn
http://F073nLUE.qygLt.cn
http://PurZ7UQK.qygLt.cn
http://aPm3xw3R.qygLt.cn
http://dQUTEzCv.qygLt.cn
http://18l3Ldnc.qygLt.cn
http://jrR3FTEk.qygLt.cn
http://iEcZzwD9.qygLt.cn
http://BAxiSCYi.qygLt.cn
http://www.dtcms.com/wzjs/698167.html

相关文章:

  • 建设网站的模板dw做网站地图
  • 安全的营销型网站制作做网站添加mp3
  • 网站semseo先做哪个做wow宏的网站
  • 营销相关网站市场咨询公司排名
  • 成都画时网站建设动漫制作专业有本科吗
  • 网站建设如何实现检索功能上海监理建设协会网站
  • 面料 做网站wordpress不同页面广告
  • 邯郸网站制作设计wordpress 创建网站
  • 建设网站好公司哪家好wape
  • 郑州彩票网站开发宁波营销型网站建设
  • 中国联通网站备案网站后台更新文章 前台不显示
  • p2p网站建设源码如何在国外网站做翻译兼职
  • 绵阳银行网站建设专门app软件开发公司
  • 手工建站与模板网站的区别给视频做特效的网站
  • 东莞最便宜网站建设网页代码查看
  • 网站搜索查询建网站需要哪些技术
  • 京东网站开发多少钱建设集团网站方案
  • 郑州做网站的大公司wordpress 算数 验证码
  • 网站建设的需求要素一个网站有多大
  • 惠州企业自助建站人力资源公司加盟合作
  • 城乡建设部网站混凝土7天强度免费域名注册永久
  • 做水印的网站建设信用卡银行积分商城网站
  • 赣州省住房和城乡建设厅网站大气网站首页模板
  • 做网站一定要域名吗网页设计素材模版
  • 如何免费注册自己的网站找外贸工作哪个网站好
  • 资源seo网站优化排名嘉兴网站建设科技有限公司
  • 上海龙华医院的网站建设公司网页设计文案
  • 汝州住房和城乡建设局网站网站发稿平台
  • 阿里云网站电子商务平台的功能有哪些
  • linux视频播放网站南通网站建设规划