7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))
生活随笔
收集整理的這篇文章主要介紹了
7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目
胡潤研究院的調查顯示,截至2017年底,中國個人資產超過1億元的高凈值人群達15萬人。假設給出N個人的個人資產值,請快速找出資產排前M位的大富翁。
輸入格式:
輸入首先給出兩個正整數N(≤10
6
)和M(≤10),其中N為總人數,M為需要找出的大富翁數;接下來一行給出N個人的個人資產值,以百萬元為單位,為不超過長整型范圍的整數。數字間以空格分隔。
輸出格式:
在一行內按非遞增順序輸出資產排前M位的大富翁的個人資產值。數字間以空格分隔,但結尾不得有多余空格。
輸入樣例:
8 3 8 12 7 3 20 9 5 18輸出樣例:
20 18 12二:思路
第一種做用的是vector容器,調用了sort函數,然后用v.back();訪問容器的最后一個元素,然后再刪除
第二種做法是用優先隊列,優先隊列里有升序和降序兩種形式,接下來做法類似。
三:知識速遞 (對vector容器常用方法不熟悉的兄弟們可以點鏈接學習哈)
vector的常用方法
那優先隊列 我就直接給出了拿著用就行,他雖然說的是隊列但 訪問隊首元素用的是top(), 而不是front(),兄弟們如果要用的話,這個地方需要特別注意一下,其他就和正常的棧和隊列的用法一樣
//升序隊列 priority_queue <int,vector<int>,greater<int> > q; //降序隊列 priority_queue <int,vector<int>,less<int> >q;四:上碼
第一種做法:
#include<bits/stdc++.h> using namespace std; int main() {vector<int>q;int N,M;cin >> N >> M;for(int i = 0; i < N; i++){int temp;cin >> temp;q.push_back(temp);}sort(q.begin(),q.end());if(N >= M){ for( int i = 0; i < M; i++){if( i == M - 1)cout << q.back();elsecout << q.back() << ' ';q.pop_back();}}else{for( int i = 0; i < N; i++){if( i == N - 1)cout << q.back();elsecout << q.back() << ' ';q.pop_back();}} }第二種做法:
#include<bits/stdc++.h> using namespace std;int main(){int N,M;priority_queue <int,vector<int>,less<int> >q;cin >> N >> M;for( int i = 0; i < N; i++ ){int temp;cin >> temp;q.push(temp);} if( N > M){for( int i = 0; i < M; i++){if( i == M-1){cout << q.top();q.pop();}else{cout << q.top() << ' ';q.pop(); }}}else{for( int i = 0; i < N; i++){if( i == N-1){cout << q.top();q.pop();}else{cout << q.top() << ' ';q.pop(); }}}}
加油BOY!
總結
以上是生活随笔為你收集整理的7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为还是ThinkPad华为还是4G手机
- 下一篇: 7-39 魔法优惠券 (25 分)(思路