LeetCode 347 前 K 個高頻元素

2021-10-02 03:15:14 字數 1026 閱讀 7026

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

示例 1:

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

輸出: [1,2]

示例 2:

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

輸出: [1]

說明:你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 陣列中不相同的元素的個數。

你的演算法的時間複雜度必須優於 o(n log n) , n 是陣列的大小。

思路:1.雜湊表建立對映算出key和key出現的次數,用結構體儲存。

2.堆結構體建最小堆,然後如果大於堆頂,替換最小堆堆頂,重新排列。

#include #include #include using namespace std;

class solution ;

vectortopkfrequent(vector& nums, int k)

buildminheap(minheaparr,minheaparr.size());

for(int i=k;iminheaparr[0]->value)

}vectorres;

for(int i=0;ikey);

}return res;

}private:

/* 建立對映 */

unordered_mapm_map;

void heapsort(vector&arr,int start, int end)

if(arr[dad]->value < arr[son]->value)else}}

void buildminheap(vector&arr, int len)

}};int main();

vectortest2=;

solution*ps = new solution();

vectorres = ps->topkfrequent(test2,3);

for(int i=0;ireturn 0;

}

Leetcode 347 前K個高頻元素

給定乙個非空的整數陣列,返回其 現頻率前k高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 首先都要先用hash表統計一次頻率,乙個思路是排序,取前k個元素 第二個思路是使用優先佇列,這裡提供兩種 class so...

Leetcode347 前K個高頻元素

給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log...

leetcode 347前k個高頻元素

題目 給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n ...