1. 程式人生 > 實用技巧 >Leetcode 第36場雙週賽(第二三題):論我跟dl的區別

Leetcode 第36場雙週賽(第二三題):論我跟dl的區別

就這個題!!!!

我:

 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 int
curr=((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這款比我那款慢一些,但是也是雙百,,,,, 吶吶吶吶吶,我咋就這麼菜呀 第三題嗎,我就直接不會了QAQ

copy內容:

注意到的是,對於矩陣的一個位置 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 };

我跟大佬的區別呀,,,,,

努力讓自己的能力跟大佬差距別那麼驚人吧