首页 > 其他分享 >前K个高频元素-力扣

前K个高频元素-力扣

时间:2024-06-05 21:32:55浏览次数:11  
标签:nums 元素 pri 力扣 vector que mp 高频 result

本题想到的解法是使用哈希表首先统计数组中每个元素出现的次数,然后对出现次数进行排序,最后进行输出。看了题解学习到使用优先级队列 小顶堆来完成,小顶堆的排序规则由自己来定义。
代码如下:

class Solution {
public:
    class MyComparison{
    public:
        bool operator()(const pair<int, int> & p1, const pair<int,int> & p2){
            return p1.second > p2.second;
        }
    };

    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> mp;
        vector<int> result(k);
        for(int i = 0; i < nums.size(); i++){
            mp[nums[i]]++;
        }

        priority_queue<pair<int, int>, vector<pair<int,int>>, MyComparison> pri_que;
        for(unordered_map<int,int>::iterator it=mp.begin(); it != mp.end(); it++){
            pri_que.push(*it);
            if(pri_que.size() > k){
                pri_que.pop();
            }
        }
        for(int i = k-1; i >=0; i--){
            result[i] = pri_que.top().first;
            pri_que.pop();
        }
        return result;
    }
};

标签:nums,元素,pri,力扣,vector,que,mp,高频,result
From: https://blog.csdn.net/why_12134/article/details/139437241

相关文章

  • Studying-代码随想录算法训练营day1| 数组理论基础,704二分查找,27.移除元素
    第一天......
  • JavaScript第十讲:DOM编程(1):节点概念,如何获取元素节点,节点属性,样式
    前言在当今的Web开发中,DOM(DocumentObjectModel)编程扮演着至关重要的角色。DOM是HTML和XML文档的编程接口,它使得我们可以像操作对象一样来操作网页上的元素。无论是构建动态网页,还是实现用户交互,都离不开对DOM的深入理解和灵活运用。在本文中,我们将开启DOM编程的系列学习之旅......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    题目链接:https://leetcode.cn/problems/binary-search/描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:......
  • 力扣刷题--2553. 分割数组中数字的数位【简单】
    题目描述给你一个正整数数组nums,请你返回一个数组answer,你需要将nums中每个整数进行数位分割后,按照nums中出现的相同顺序放入答案数组中。对一个整数进行数位分割,指的是将整数各个数位按原本出现的顺序排列成数组。比方说,整数10921,分割它的各个数位得到[1,0......
  • 代码随想录算法训练营 第一天 704 二分查找 27 移除元素
    leetcode704 二分查找704二分查找思想:二分法简单二分问题注意二分问题有很多模式,二分问题查找核心是区间问题注意所学两种写法:区间左闭右开  区间左闭右闭二分查找问题 classSolution{publicintsearch(int[]nums,inttarget){if(target>nu......
  • 深度学习高频手撕代码
    nmsdefcal_iou(bbox1,bbox2):#x1,y1,x2,y2#min_x-max_xinter_x=min(bbox1[2],bbox2[2])-max(bbox1[0],bbox2[0])#min_y-max_yinter_y=min(bbox1[3],bbox2[3])-max(bbox1[1],bbox2[1])ifinter_x<=0orinter_y<=0:......
  • 力扣 41.缺少的第一个正整数
    题目描述:给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例1:输入:nums=[1,2,0]输出:3解释:范围[1,2]中的数字都在数组中。示例2:输入:nums=[3,4,-1,1]输出:2解释:1......
  • 力扣-1049. 最后一块石头的重量 II
    1.题目题目地址(1049.最后一块石头的重量II-力扣(LeetCode))https://leetcode.cn/problems/last-stone-weight-ii/题目描述有一堆石头,用整数数组 stones表示。其中 stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分......
  • 6.4数组--移除元素
    26.删除有序数组中的重复项题意描述:给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确......
  • 【每周例题】 C++ 力扣 优势洗牌
    优势洗牌题目优势洗牌 题目分析1.采用双指针方法进行匹配2.依照题目所说,采用索引,首先需要填充索引,然后对索引进行升序排序。2.使用双指针进行匹配如果nums1[idx1[i]](即当前nums1中的元素)大于nums2[idx2[left]](即nums2中的当前最小元素),则将nums1[idx1[i]]赋值给ans[idx2[......