面試中被問到一組有序序列(從小到大),求這組序列中的前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
- MySQL分組排序取前N條記錄 以及 生成自動數字序列 的SQLMySql排序
- 面試中被面試官問到的問題答案(一)面試
- Python中的有序序列有哪些Python
- POJ 2442-Sequence(優先佇列-m組n個數每組取一個求n個最小值)佇列
- 一組關鍵字序列,分別給出用希爾排序、直接選擇排序演算法從小到大排序結果排序演算法
- 7-34 PTA C語言--求分數序列前N項和C語言
- HTML5中有序列表和無序列表的寫法HTML
- Python的文字和位元組序列Python
- HTML <ol> 有序列表HTML
- 分組求TOP N記錄
- [MySQL] 分組排序取前N條記錄以及生成自動數字序列,類似group by後 limitMySql排序MIT
- 序列密碼與分組密碼密碼
- RxSwift筆記三組合序列Swift筆記
- mysql 分組取每個組的前幾名的問題MySql
- 【HTML】02有序無序列表HTML
- 面試問你java中的序列化怎麼答?面試Java
- IIC序列匯流排的組成及工作原理
- 『無為則無心』Python序列 — 20、Python中的元組Python
- [java面試]javascript中dom取值問題radio名字一樣歸屬於同一個組,求點選的是哪一個...面試JavaScript
- SQL 如何在時間序列中根據欄位變化分組SQL
- 編寫一個對n個資料從大到小的排序C…排序
- 求陣列中k個數的所有組合陣列
- 用數學歸納法證明前序序列和中序序列唯一的確定一個二叉樹序列二叉樹
- Serializer 序列化 -----檢視層傳入一個變數到序列化器的方法變數
- AIX 將ps從同卷組一個PV遷到另一個PVAI
- 從面試題中學演算法(2)---求陣列中唯一n個出現1次的數字(n=1,2,3)面試題演算法陣列
- 從 Swift 中的序列到型別擦除Swift型別
- C# 檢視序列化的實體位元組數C#
- python基礎之序列型別的方法——列表&元組Python型別
- 使用CSS計數器美化有序列表CSS
- ZOJ 2319 最長上升子序列並輸出組成該序列的元素編號
- 從零寫一個時間序列資料庫資料庫
- 位元組跳動面試官這樣問有關字串的問題!!面試字串
- [PY3]——根據某個特定的欄位來分組迭代訪問一個欄位或序列?/ itertools.groupby( )函式函式
- 有序列表和集合插入操作的耗時差距