1. 程式人生 > >【LeetCode】347. 前K個高頻元素

【LeetCode】347. 前K個高頻元素

題目描述

給定一個非空的整數陣列,返回其中出現頻率前 k 高的元素。

說明

  • 你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 陣列中不相同的元素的個數。
  • 你的演算法的時間複雜度必須優於 O(n log n) , n 是陣列的大小。

示例

輸入: nums = [1,1,1,2,2,3], k = 2 輸出: [1,2]

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

解決方法

使用map統計每個數字出現的頻率,然後將map元素存入vector中,再對vector排序

class Solution {
public:
    static bool cmp(pair<
int,int> a,pair<int,int> b){ //降序排序 return a.second>b.second; } vector<int> topKFrequent(vector<int>& nums, int k) { //使用map統計每個數字出現的頻率,然後將map元素存入vector中,再對vector排序 map<int,int> m; for (int i=0;i<nums.size();i++) m[
nums[i]]++; vector<pair<int,int>> vec(m.begin(),m.end()); sort(vec.begin(), vec.end(), cmp); vector<int> res; for (int i=0;i<k;i++) res.push_back(vec[i].first); return res; } };