7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析
7-14 電話聊天狂人 (25 分)map做法
1:題目
給定大量手機(jī)用戶通話記錄,找出其中通話次數(shù)最多的聊天狂人。
輸入格式:
輸入首先給出正整數(shù)N(≤10
?5
?? ),為通話記錄條數(shù)。隨后N行,每行給出一條通話記錄。簡(jiǎn)單起見(jiàn),這里只列出撥出方和接收方的11位數(shù)字構(gòu)成的手機(jī)號(hào)碼,其中以空格分隔。
輸出格式:
在一行中給出聊天狂人的手機(jī)號(hào)碼及其通話次數(shù),其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號(hào)碼及其通話次數(shù),并且附加給出并列狂人的人數(shù)。
輸入樣例:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
輸出樣例:
13588625832 3
2:思路分析
來(lái)看碼的同學(xué)呀 一定要去學(xué)一下map容器,刷題刷到?jīng)]用過(guò)的知識(shí)并且挺重要的就趕緊去學(xué)
用了map 容器 其實(shí)就沒(méi)啥思路可分析的 ,這個(gè)容器太牛逼,存數(shù)據(jù)時(shí)已經(jīng)將重復(fù)的元素個(gè)數(shù)累加好了 即最終狀態(tài)是一個(gè)號(hào)碼 對(duì)應(yīng)一個(gè) 通話次數(shù)
但要注意的題目給的要求 如果有相同號(hào)碼時(shí)需要比較大小, 我糾結(jié)了半天,想這一串?dāng)?shù)字字符串怎么比較大小呀? 但自己敲了個(gè)demo來(lái)驗(yàn)證 字符串的比較大小,才發(fā)現(xiàn) 原來(lái)是直接比較就可以不用糾結(jié)那么多
3:上碼
#include<bits/stdc++.h> using namespace std;int main(){int N,max = 0,count = 0;map<string,int>m;map<string,int>::iterator t;cin >> N;string maxid;for( int i = 0; i < N; i++ ){string str1,str2;cin >> str1 >> str2;m[str1]++; //也就是m[str]代表的就是 鍵值 m[str2]++; //如果遇到 相同的關(guān)鍵字 則 鍵值加一 if( m[str1] > max){max = m[str1];maxid = str1;} if( m[str2] > max ){max = m[str2];maxid = str2;}// cout << m[str1] << ' ' << m[str2] << endl; }for( t = m.begin(); t != m.end(); t++ ){if(t->second == max){count++; }}if(count == 1){cout << maxid << ' ' << max;}else{for( t = m.begin(); t != m.end(); t++ ){if(t->second == max){cout << t->first <<' '<< max <<' '<< count;break; }} }}//4 //13005711862 13588625832 //13505711862 13005711862 //13588625832 13005711862 //15005713862 135886258324:上超時(shí)碼
這個(gè)碼我也要上,畢竟也是我努力的結(jié)果,敲碼當(dāng)中 最難受的事情了莫過(guò)于 你寫的代碼超時(shí)了,這就基本判定i你要重寫了,畢竟你再怎么該也是原來(lái)的那個(gè)思路 時(shí)間復(fù)雜度不會(huì)降低多少的。
這個(gè)碼用的是vector存的數(shù)據(jù),只想說(shuō)一句 我以前沉浸與vector的時(shí)代 宣告告一段落了 ,我要更加深入到map當(dāng)中
最后還是希望陌生的你 加油 !
總結(jié)
以上是生活随笔為你收集整理的7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 肠粘连怎么回事
- 下一篇: java中编译类型的方法 和 运行时的类