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 };

 

我跟大佬的区别呀,,,,,

努力让自己的能力跟大佬差距别那么惊人吧

posted @ 2020-10-04 21:09  安之若醇  阅读(201)  评论(0编辑  收藏  举报
Live2D服务支持