Leetcode 第36場雙週賽(第二三題):論我跟dl的區別
阿新 • • 發佈:2020-10-04
就這個題!!!!
我:
1 class Solution { 2 public: 3 vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) { 4 map<string,set<string>> m; 5 vector<string> ans; 6 for(int i=0;i<keyName.size();i++){ 7 m[keyName[i]].insert(keyTime[i]);8 } 9 for(auto it=m.begin();it!=m.end();it++){ 10 if(it->second.size()<3) 11 continue; 12 13 auto it1 = it->second.begin(); 14 string time = *it1; 15 int prev = ((time[0]-'0')*10+time[1]-'0')*60+(time[3]-'0')*10+time[4]-'0'; 16 it1++; 17 time = *it1; 18 int mid = ((time[0]-'0')*10+time[1]-'0')*60+(time[3]-'0')*10+time[4]-'0'; 19 it1++; 20 for(;it1!=it->second.end();it1++){ 21 time=*it1; 22 intcurr=((time[0]-'0')*10+time[1]-'0')*60+(time[3]-'0')*10+time[4]-'0'; 23 if(curr-prev<=60){ 24 ans.push_back(it->first); 25 break; 26 } 27 28 prev=mid; 29 mid=curr; 30 } 31 32 } 33 34 return ans; 35 } 36 };
就是,,,用Map每個名字存一下嘛,然後比較的時候,全化成分鐘,然後用i和i-2比就行,然後前兩個額話是單獨搞就好(要不不太好整)
所以還是感覺STL是個好傢伙,,,,,
不過我這個題寫了四十多分鐘emmmmmmmmm,主要原因就是 ,,,,,,,我,漏了一個等號,,,,後來找不到,看一個DL的題解才找到了bug
然鵝:
(選自https://www.cnblogs.com/Crossea/p/13766510.html)
1 class Solution { 2 public: 3 int convert(string s){ 4 5 return 60*((s[0]-'0')*10+s[1]-'0')+(s[3]-'0')*10+s[4]-'0'; 6 } 7 vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) { 8 // set<string> res; 9 vector<string> ans; 10 map<string, vector<int> > mp; 11 for(int i=0; i<keyName.size(); i++){ 12 mp[keyName[i]].push_back(convert(keyTime[i])); 13 } 14 for(auto e:mp){ 15 vector<int>& t = e.second; 16 sort(t.begin(), t.end()); 17 for(int i=0; i<t.size(); i++){ 18 auto pos = upper_bound(t.begin(), t.end(), t[i]+60); 19 if(distance(t.begin()+i, pos)>=3){ 20 ans.push_back(e.first); 21 break; 22 } 23 } 24 } 25 return ans; 26 } 27 };
其實也就差個十行,,,但是仔細一看,,,,每一行都是知識點。。。
首先是那個排序,,,我很服直接就把那個跨天給解決了(當時還覺得這一塊需要什麼判斷啥的,其實根本就,,,,不過我後來直接作差大於0小於等於六十也可以的)
for each迴圈嗎,,,,
還有就是最後那塊,,,,,我感覺我無論怎麼想,都會搞一個作差(甚至當時還像兩個迴圈,像冒泡那樣)
誒呀也該更新一下陳舊的大腦了
瞅瞅這位那個,是用upper_bound找到那個值,再用distance 算距離,兩行QAQ
剛剛
交了一下,DL這款比我那款慢一些,但是也是雙百,,,,, 吶吶吶吶吶,我咋就這麼菜呀 第三題嗎,我就直接不會了QAQcopy內容:
注意到的是,對於矩陣的一個位置 ans[i][j]
這個數加上K也就是使得rowSum[i]和colSum[j]加上K
那麼體現在從0開始的時候,也就是使得rowSum[i]和colSum[j]不小於0
那麼從上往下直接取min(rowSum[i], colSum[j])即可
1 class Solution { 2 public: 3 vector<vector<int>> restoreMatrix(vector<int>& rowSum, vector<int>& colSum) { 4 int n = rowSum.size(); 5 int m = colSum.size(); 6 vector<vector<int> > ans(n, vector<int> (m,0)); 7 for(int i=0; i<n; i++){ 8 for(int j=0; j<m; j++){ 9 ans[i][j] = min(rowSum[i], colSum[j]); 10 rowSum[i] -= ans[i][j]; 11 colSum[j] -= ans[i][j]; 12 } 13 } 14 return ans; 15 } 16 };
我跟大佬的區別呀,,,,,
努力讓自己的能力跟大佬差距別那麼驚人吧