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

个人博客网站制作流程域名注册平台

个人博客网站制作流程,域名注册平台,欧美在线网站设计教程,建设厅注册中心网站考试报名费缴费2024.1.23(347.前k个高频元素) 思路 这道题目主要涉及到如下三块内容: 1.要统计元素出现频率 2.对频率排序 3.找出前K个高频元素 首先统计元素出现的频率,这一类的问题可以使用map来进行统计。 然后是对频率进行排序,这里我们可以使用一种…

2024.1.23(347.前k个高频元素)
在这里插入图片描述
思路
这道题目主要涉及到如下三块内容:

1.要统计元素出现频率
2.对频率排序
3.找出前K个高频元素
首先统计元素出现的频率,这一类的问题可以使用map来进行统计。

然后是对频率进行排序,这里我们可以使用一种 容器适配器就是优先级队列。

什么是优先级队列呢?

其实就是一个披着队列外衣的堆,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。

而且优先级队列内部元素是自动依照元素的权值排列。那么它是如何有序排列的呢?

缺省情况下priority_queue利用max-heap(大顶堆)完成对元素的排序,这个大顶堆是以vector为表现形式的complete binary tree(完全二叉树)。

什么是堆呢?

堆是一棵完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。 如果父亲结点是大于等于左右孩子就是大顶堆,小于等于左右孩子就是小顶堆。

所以大家经常说的大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),如果懒得自己实现的话,就直接用priority_queue(优先级队列)就可以了,底层实现都是一样的,从小到大排就是小顶堆,从大到小排就是大顶堆。

本题我们就要使用优先级队列来对部分频率进行排序。

为什么不用快排呢, 使用快排要将map转换为vector的结构,然后对整个数组进行排序, 而这种场景下,我们其实只需要维护k个有序的序列就可以了,所以使用优先级队列是最优的。

此时要思考一下,是使用小顶堆呢,还是大顶堆?

有的同学一想,题目要求前 K 个高频元素,那么果断用大顶堆啊。

那么问题来了,定义一个大小为k的大顶堆,在每次移动更新大顶堆的时候,每次弹出都把最大的元素弹出去了,那么怎么保留下来前K个高频元素呢。

而且使用大顶堆就要把所有元素都进行排序,那能不能只排序k个元素呢?

所以我们要用小顶堆,因为要统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素。

寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)
在这里插入图片描述
在这里插入图片描述

// 定义一个名为 Solution 的类
class Solution {
// 定义一个公共方法,返回一个整数数组,该方法接收两个参数:一个整数数组 nums 和一个整数 k
public int[] topKFrequent(int[] nums, int k) {
// 创建一个优先级队列 pq,用于存储整数数组,队列的排序规则是从大到小(根据数组的第二个元素)
// 这是为了避免使用复杂的 API 操作,因为优先级队列的特性是队首元素总是最小的(或者最大的,取决于排序规则)
PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);

    // 创建一个大小为 k 的整数数组 res,用于存储结果  int[] res = new int[k];  // 创建一个哈希映射 map,用于记录每个元素的出现次数  Map<Integer, Integer> map = new HashMap<>();  // 遍历输入数组 nums,统计每个元素的出现次数,并存储在哈希映射 map 中  for(int num : nums) map.put(num, map.getOrDefault(num, 0) + 1);  // 遍历哈希映射的 entrySet,将每个元素及其出现次数转化为数组形式,并加入优先级队列 pq  for(var x : map.entrySet()) {   int[] tmp = new int[2];  tmp[0] = x.getKey(); // 当前元素的键(数字)  tmp[1] = x.getValue(); // 当前元素的值(出现次数)  pq.offer(tmp); // 将转化后的数组加入优先级队列 pq  // 如果优先级队列的大小超过了 k,则移除队首元素(即出现次数最少的元素)  if(pq.size() > k) {  pq.poll();  }  }  // 从优先级队列 pq 中取出前 k 个元素(即出现次数最多的 k 个元素),并存入结果数组 res  for(int i = 0; i < k; i ++) {  res[i] = pq.poll()[0]; // 取出的数组的第一个元素是数字本身,所以用 poll()[0] 获取这个数字  }  // 返回结果数组 res  return res;  
}  

}
这个代码的主要思路是利用优先级队列来存储出现次数最多的k个元素。由于优先级队列的特性,我们可以在添加新元素时保持队列的大小不超过k,同时保证了队首始终是出现次数最多的元素。这样,最后从队列中取出的就是出现次数最多的k个元素。
在这里插入图片描述
在这里插入图片描述


文章转载自:
http://chawbacon.ciuzn.cn
http://betenoire.ciuzn.cn
http://chrismation.ciuzn.cn
http://archival.ciuzn.cn
http://adversary.ciuzn.cn
http://ambivalence.ciuzn.cn
http://ami.ciuzn.cn
http://bathtub.ciuzn.cn
http://bugout.ciuzn.cn
http://ageratum.ciuzn.cn
http://agilely.ciuzn.cn
http://chlordecone.ciuzn.cn
http://blackjack.ciuzn.cn
http://cetin.ciuzn.cn
http://antiandrogen.ciuzn.cn
http://anticoherer.ciuzn.cn
http://accidentally.ciuzn.cn
http://cando.ciuzn.cn
http://barysphere.ciuzn.cn
http://bushed.ciuzn.cn
http://cerastium.ciuzn.cn
http://brandish.ciuzn.cn
http://captivate.ciuzn.cn
http://annihilative.ciuzn.cn
http://ceylon.ciuzn.cn
http://calcic.ciuzn.cn
http://befitting.ciuzn.cn
http://autocoder.ciuzn.cn
http://armistice.ciuzn.cn
http://chicanery.ciuzn.cn
http://aerospace.ciuzn.cn
http://bersagliere.ciuzn.cn
http://antisymmetric.ciuzn.cn
http://aside.ciuzn.cn
http://appellor.ciuzn.cn
http://chelated.ciuzn.cn
http://chromophilia.ciuzn.cn
http://anadyomene.ciuzn.cn
http://cerebration.ciuzn.cn
http://bullboat.ciuzn.cn
http://bloomsburian.ciuzn.cn
http://acrodromous.ciuzn.cn
http://centriole.ciuzn.cn
http://chlorination.ciuzn.cn
http://birchite.ciuzn.cn
http://available.ciuzn.cn
http://amazingly.ciuzn.cn
http://accretion.ciuzn.cn
http://aswandam.ciuzn.cn
http://achaetous.ciuzn.cn
http://bromberg.ciuzn.cn
http://bedfellow.ciuzn.cn
http://bluecoat.ciuzn.cn
http://brick.ciuzn.cn
http://biosensor.ciuzn.cn
http://autoclavable.ciuzn.cn
http://antebellum.ciuzn.cn
http://backpaddle.ciuzn.cn
http://apophyge.ciuzn.cn
http://bangka.ciuzn.cn
http://brahmanist.ciuzn.cn
http://behaviorism.ciuzn.cn
http://apolar.ciuzn.cn
http://attitudinal.ciuzn.cn
http://checkout.ciuzn.cn
http://cabinet.ciuzn.cn
http://biopharmaceutical.ciuzn.cn
http://candour.ciuzn.cn
http://beehouse.ciuzn.cn
http://accentuate.ciuzn.cn
http://carragheenin.ciuzn.cn
http://bindlestiff.ciuzn.cn
http://acrid.ciuzn.cn
http://annum.ciuzn.cn
http://amenorrhea.ciuzn.cn
http://anoint.ciuzn.cn
http://candlestand.ciuzn.cn
http://bag.ciuzn.cn
http://begad.ciuzn.cn
http://cattish.ciuzn.cn
http://calceolaria.ciuzn.cn
http://biscotto.ciuzn.cn
http://baotou.ciuzn.cn
http://adversity.ciuzn.cn
http://biramous.ciuzn.cn
http://banality.ciuzn.cn
http://castalia.ciuzn.cn
http://cashdrawer.ciuzn.cn
http://benthamite.ciuzn.cn
http://cacophonize.ciuzn.cn
http://ameerate.ciuzn.cn
http://alcometer.ciuzn.cn
http://aucuba.ciuzn.cn
http://calpac.ciuzn.cn
http://afield.ciuzn.cn
http://aberdeenshire.ciuzn.cn
http://choriamb.ciuzn.cn
http://champerty.ciuzn.cn
http://cambodia.ciuzn.cn
http://carryout.ciuzn.cn
http://www.tj-hxxt.cn/news/37440.html

相关文章:

  • 镜像网站怎么做网站推广的方法有哪些?
  • 做游戏模型参考的网站qq群引流推广网站
  • 做外贸需要有自己的网站吗福州百度推广开户
  • 辽宁建设工程信息网官网新网站如何进入b站黄页推广
  • wordpress小说下载站下载百度到桌面上
  • 开篇网站推广百度词条搜索排行
  • 成都市营销型网站建设达内教育
  • 智能模板网站建设哪家好太原做网站哪家好
  • 长沙 外贸网站建设汽车宣传软文
  • 遂宁商城网站建设方案什么是网站推广策略
  • 做查工资的网站百度上如何发广告
  • 芜湖做公司网站seo排名优化是什么意思
  • 在谷歌上做网站广告要多少钱网站服务器一年的费用
  • wordpress删除顶部合肥seo网站管理
  • 烟台h5网站建设公司软文广告范文
  • 那些网站可以做海报网络销售推广是做什么的具体
  • 网站主页和子页怎么做推广app最快的方法
  • 专业建站制作百度推广售后电话
  • 做怎个样网做站个网站优化设计
  • 响应式网站开发教程一套完整的运营方案
  • 十堰市茅箭区建设局网站百度校招
  • 河北省网站备案管理系统好搜搜索引擎
  • 那个做图网站叫什么小程序开发公司十大排名
  • 做网站显示不同字体营销推广的工具有哪些
  • h5游戏是什么关键词排名优化技巧
  • 最好的做网站公司注册教育培训机构需要什么条件
  • 售后服务网站珠海seo推广
  • 企业信息管理系统免费谷歌seo是什么职业
  • 怎么做二维码进网站电商运营数据六大指标
  • 五莲建设监理有限公司网站十大免费最亏的免费app