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

建设工程平台网站搜索引擎营销的内容和层次有哪些

建设工程平台网站,搜索引擎营销的内容和层次有哪些,web2.0网站开发d,给别人做网站用什么题目链接 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 示例 2: 输入: nums [1], k 1 输出: [1] 提示&#xff1a; 1 < nums…

题目链接

题目描述

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

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

输入: nums = [1], k = 1
输出: [1]

提示:

1 <= nums.length <= 105
k 的取值范围是 [1, 数组中不相同的元素的个数]
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

题解

思路

要求频率前k个高的元素的元素,很自然的就是先想到用map来收集每个元素出现的频率,然后对这些频率进行排序
所以这道题的难点就转化成了,怎么对频率进行排序?

这道题考察的是优先级队列的知识点
什么是优先级队列?
队列进出的顺序按照优先级,而不是进入的前后顺序
举个例子: 医院中处理病人不是按照病人来的顺序,而是根据病情的严重程度

我们需要找到频率前k高的元素,可以选择维护一个大小为k的堆,使堆里面的元素总是前k个大的。
那么要使用小顶堆还是大顶堆呢?
在小顶堆中,每次弹出的元素都是堆中最小的元素,堆中剩的是大的;大顶堆中,每次弹出的元素都是堆中最大的元素,堆中剩的是小的。
所以我们要选择小顶堆。

c++中恰好提供了这样一种队列,即priority_queue,队列内部的元素总是有序的,按照元素的权值进行排序。

所以我们可以设置一个大小为k的优先队列,遍历Map的过程中去维护这个队列。最后队列里面剩下的就是前k个出现频率最高的元素啦

代码书写

class MyComparison{
public:bool operator()(const pair<int,int>&m,const pair<int,int>&n){return m.second>n.second;}
};
class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int,int>myMap;vector<int>re(k);for(int i =0;i<nums.size();i++){myMap[nums[i]]++;}priority_queue<pair<int,int>,vector<pair<int,int>>,MyComparison>q;for(auto it = myMap.begin();it!=myMap.end();it++){q.push(*it);if(q.size()>k){q.pop();}}for(int i=0;i<k;i++){re[i]=q.top().first;q.pop();}return re;}
};

可能会有像我一样的c++苦手看得眼花缭乱
我现在可以详细的解释一下。

  • 为什么采用unordered_map去收集每个元素的频率?
    因为我们不需要使键是有顺序的,并且unorder_map底层逻辑实现是哈希表,在平均情况下查找效率为O(1) 效率更高

  • priority_queue<pair<int,int>,vector<pair<int,int>>,MyComparison>q;是什么意思?
    第一个模版参数pair<int,int>代表这个优先级队列中存放的数据是pair<int,int>类型;
    第二个模版参数vector<pair<int,int>>代表这个队列的底层容器是vector<pair<int,int>>
    第三个模版参数MyComparison是一个自定义的类,为什么这里可以直接放一个类呢?
    priority_queque的声明如下:

template<class T,                           // 元素类型class Container = vector<T>,      // 底层容器(默认vector)class Compare = less<T>           // 比较器类型(默认less<T>)
> class priority_queue;

第三个参数 Compare 必须是一个类型,而不是函数或对象。
例如,less 和 greater 是STL中预定义的类型,它们内部重载了 operator(),因此可以生成函数对象(Functor)

  • 为什么要重新写一个类重载()呢?
    默认比较器会按 pair 的第一个元素的大小进行排序,而我们需要按第二个元素的大小进行排序,所以需要重写。
http://www.dtcms.com/wzjs/491378.html

相关文章:

  • 代理服务器地址百度关键词优化平台
  • 北京南站在几环外贸网站搭建推广
  • 制作网站页面怎么做百度大搜是什么
  • 怎么给一个网站做seo成功品牌策划案例
  • 网站开发设计语言sem培训班学费哪个好
  • 做程序教程网站赚钱吗金花关键词工具
  • 网站推广书真正的免费建站在这里
  • 开设网站需要什么西安关键词快速排名
  • 个人做网站可以盈利么成都seo论坛
  • 沙井网站推广seo排名课程咨询电话
  • 合肥网站建设培训学校微信小程序怎么做店铺
  • 做甜品台的网站想要推广页
  • 做伦理电影网站怎么发外链
  • 网站开发与维护学生作品集户外广告
  • 网站建设目的分析seo网站关键词优化
  • 移动网站时事热点新闻
  • 网站建设noajt手机网站制作软件
  • 鹤壁网站建设兼职百度关键词网站排名优化软件
  • 赣州省住房和城乡建设厅网站搜索引擎优化的要点
  • 网站域名验证功能上线免费建网站平台
  • wordpress主题验证多少关键词排名优化软件
  • wordpress 主题不显示图片seo分析工具有哪些
  • 三个律师做网站合适吗汕头百度推广公司
  • 网站排名突然下降解决关键少数
  • 南阳疫情最新消息搜狗网站seo
  • 新疆建设委员会网站查询网址域名ip地址
  • 电竞网站建设方案百度云登录
  • 上海软件定制合肥seo招聘
  • 太原再次发出通告山东公司网站推广优化
  • 网站开发保密协议范本seo对各类网站的作用