面試中被問到一組有序序列(從小到大),求這組序列中的前n個
之前面試的時候,被問到,我的回答是每次都取頭部進行比較,然後再取剩下的進行比較。身為菜雞的我思路有了,卻寫不出來,後面想一想,這種topk問題,不就是堆問題解決嗎?唉。菜雞的悲哀。
如果是一個數列,求前n個如下
#include<iostream>
#include<queue>
#include<vector>
//求一組數中最小的n個數
using namespace std;
class Solution {
public:
//獲取陣列中第n個小的數
vector <int> Get_min_k(vector<int> v,int k)
{
//對於sort()函式,傳入的第三個引數如果是greater<int>(),則為降序;
//對於priority_queue,傳入的第三個引數如果是greater<int>,為小頂堆
priority_queue<int, vector<int>, greater<int> > q;
vector <int> ret;
for (int i = 0;i < k;i++)
{
if (q.size()<=k)
{
q.push(v[i]);
}
else
{
if (v[i]< q.top())//小的話放進去
{
q.pop();
q.push(v[i]);
}
}
}
int i = 1;
while (!q.empty())
{
ret.emplace_back(q.top()) ;
q.pop();
i++;
}
return ret;
}
};
int main()
{
vector<int> v{5,3,6,8,1,2,3,56,23,65,3,6};
Solution s;
vector<int> ret=s.Get_min_k(v,5);
int i = 1;
for (auto it = ret.begin();it!= ret.end();it++)
{
cout << "第" << i +1<< "個元素為" << *it << endl;
}
}
後來想了想,多組,數列時,我們只要將多組中的前n個放到優先佇列(堆)中即可,不需要都放進去;程式碼如下
vector <int> Get_min_k2(vector<vector<int>> vv, int k)
{
priority_queue<int, vector<int>, greater<int> > q;
vector <int> ret;
for (int i = 0;i < vv.size();i++)
{
for (int j=0;j< vv[i].size()&&j<k;j++)
{
if (q.size() <= k)
{
q.push(vv[i][j]);
}
if (vv[i][j] < q.top())//小的話放進去
{
q.pop();
q.push(vv[i][j]);
}
}
}
int i = 1;
while (!q.empty())
{
ret.emplace_back(q.top());
q.pop();
i++;
}
return ret;
}
2020.10.5
相關文章
- 輸入n個元素組成的序列s,你需要找出一個乘積最大的連續子序列
- 一句話實現MySQL庫中的有序列舉條件分組MySql
- 列表、元組、字串是有序序列嗎?Python基礎教程字串Python
- Python中的有序序列有哪些Python
- 兩個有序連結串列序列的交集
- 序列化組建
- 7-34 PTA C語言--求分數序列前N項和C語言
- 2022-07-17:1、2、3...n-1、n、n、n+1、n+2... 在這個序列中,只有一個數字有重複(n)。 這
- 面試問你java中的序列化怎麼答?面試Java
- 求最大子序列的問題
- Python的文字和位元組序列Python
- HTML5中有序列表和無序列表的寫法HTML
- HTML <ol> 有序列表HTML
- 一組關鍵字序列,分別給出用希爾排序、直接選擇排序演算法從小到大排序結果排序演算法
- RxSwift筆記三組合序列Swift筆記
- 【HTML】02有序無序列表HTML
- 序列化和反序列化pickle和json 模組JSON
- 小於n的最大數,記一道位元組面試題面試題
- Promise 序列呼叫面試題Promise面試題
- 序列化模組,subprocess模組,re模組,常用正則
- mysql 分組取每個組的前幾名的問題MySql
- 『無為則無心』Python序列 — 20、Python中的元組Python
- 序列化模組,隨機數模組,os模組,sys模組,hashlib模組隨機
- 序列密碼與分組密碼密碼
- Python常用模組(random隨機模組&json序列化模組)Pythonrandom隨機JSON
- 位元組跳動面試官這樣問有關字串的問題!!面試字串
- python 序列化pickle&json模組PythonJSON
- IIC序列匯流排的組成及工作原理
- IIS提示“請求篩選模組被配置為拒絕包含雙重轉義序列的請求”
- Serializer 序列化 -----檢視層傳入一個變數到序列化器的方法變數
- 位元組面試問我如何高效設計一個LRU,當場懵面試
- 面試阿里,位元組,騰訊90%被問到的springboot常見面試題,這次給你講的明明白白!阿里Spring Boot面試題
- 【Java面試】簡單說一下你對序列化和反序列化的理解Java面試
- 用數學歸納法證明前序序列和中序序列唯一的確定一個二叉樹序列二叉樹
- 給定一個n,輸出從1到n的整數
- 從零寫一個時間序列資料庫資料庫
- 7-24 兩個有序連結串列序列的合併 (20 分)
- 7-2 兩個有序連結串列序列的合併 (20分)