日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

7-14 電話聊天狂人 (25 分)map做法

1:題目

給定大量手機用戶通話記錄,找出其中通話次數最多的聊天狂人。

輸入格式:
輸入首先給出正整數N(≤10
?5
?? ),為通話記錄條數。隨后N行,每行給出一條通話記錄。簡單起見,這里只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。

輸出格式:
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,并且附加給出并列狂人的人數。

輸入樣例:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
輸出樣例:
13588625832 3

2:思路分析

來看碼的同學呀 一定要去學一下map容器,刷題刷到沒用過的知識并且挺重要的就趕緊去學
用了map 容器 其實就沒啥思路可分析的 ,這個容器太牛逼,存數據時已經將重復的元素個數累加好了 即最終狀態是一個號碼 對應一個 通話次數
但要注意的題目給的要求 如果有相同號碼時需要比較大小, 我糾結了半天,想這一串數字字符串怎么比較大小呀? 但自己敲了個demo來驗證 字符串的比較大小,才發現 原來是直接比較就可以不用糾結那么多

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]++; //如果遇到 相同的關鍵字 則 鍵值加一 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 13588625832

4:上超時碼

這個碼我也要上,畢竟也是我努力的結果,敲碼當中 最難受的事情了莫過于 你寫的代碼超時了,這就基本判定i你要重寫了,畢竟你再怎么該也是原來的那個思路 時間復雜度不會降低多少的。
這個碼用的是vector存的數據,只想說一句 我以前沉浸與vector的時代 宣告告一段落了 ,我要更加深入到map當中

//string 存的字符串 #include<bits/stdc++.h> using namespace std;int cnt;int repeat(vector<string>&v1,string a) {for( int i = 0; i < v1.size(); i++){if( v1[i] == a)//判斷兩個字符串是否相等{cnt++;}}return cnt; }int main() {vector<string>v,v1;int N,max = 0,count = 0; string min = "9999999999";string str1,str2; cin >> N;for( int i = 0; i < 2 * N; i++ ){string str;cin >> str;v.push_back(str);}for( int i = 0; i < 2 * N; i++ ){cnt = 0;int temp = repeat(v,v[i]);if( temp > max ) //求電話狂人 {max = temp;str1 = v[i];}} //求取有相同 通話次數的電話狂人 for( int j = 0; j < v.size(); j++ ){cnt = 0;int temp = repeat(v,v[j]);if( temp == max ) //求電話狂人 {v1.push_back(v[j]); }} // for( int i = 0; i < v1.size(); i++) // cout << v1[i] << ' ';//去除 vector容器當中 重復的元素 sort(v1.begin(), v1.end());//unique(v1.begin(),v1.end()); //將重復的元素放到數組的最后面 v1.erase(unique(v1.begin(), v1.end()), v1.end());for( int j = 0; j < v1.size(); j++ ){if(v1[j] < min){min = v1[j];}} // cout << v1.size();// cout << count << endl;if( v1.size() == 1 )cout << str1 << ' ' << max;elsecout << min << ' ' << max << ' ' << v1.size();}

最后還是希望陌生的你 加油 !

總結

以上是生活随笔為你收集整理的7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。