这次周赛因为放清明假,摆了两天,导致状态一直不对,开赛过后就只是看了看题目,想了一下思路,浅写了一下代码,超出时间限制以后就再也没有了重新修改的心思,也就相当于放弃了比赛。
T1:转化时间需要的最少操作次数
这个题看第一眼思路就很明确,将字符串转化成整数。然后再由高到底进行操作,这样得到的便是最少擦作次数。
将字符串转化为整数的方法有两种,一是自己实现,即current[0]-'0’这样字符current[0]就转变为了整数。二是使用库函数atoi函数。int i=atoi(current[0]);
在将字符串转化为数组后我犯了一个错误,直接将计数sum初始化的值定位两个数组小时之差,然后考虑分钟部分,从15开始进行操作。这样就忽略了虽然有小时差,但是时间差并没有60分钟的情况。所以出现了报错,这也是在赛后状态调整过来了才发现的问题。
class Solution {
public:
int convertTime(string current, string correct) {
int a=0,b=0;
a=(current[0]-'0')*10+current[1]-'0';
b=(current[3]-'0')*10+current[4]-'0';
int c=0,d=0;
c=(correct[0]-'0')*10+correct[1]-'0';
d=(correct[3]-'0')*10+correct[4]-'0';
int sum=0;
int h=c*60+d-(a*60+b);
sum+=h/60;
h%=60;
sum+=h/15;
h=h%15;
sum+=h/5;
h=h%5;
sum+=h;
return sum;
}
};
T2:找出输掉零场或一场比赛的玩家
这个题我一开始把问题想的复杂了。我的思路是将这个二维数组先拆为两个一维数组,然后没有输掉比赛的就是在赢得数组里有,但是在输的数组里面没有得。只输掉一场比赛得就是在输的数组里面用哈希表找出计数为1的。其实我觉得我的思路没有问题,不过我没有坚持写代码。
今天再看这个题目,发现了有另一种思路,用一个哈希表进行统计,赢了比赛的不用管,计数各输了的比赛场次。最后统计输了次数为0和1的即可。
class Solution {
public:
vector<vector<int>> findWinners(vector<vector<int>>& matches) {
map<int,int>mp;
for(auto &match:matches){
mp[match[0]]=mp[match[0]];
mp[match[1]]++;
}
vector<int>res1,res2;
for(auto&[id,times]:mp){
if(times==0){
res1.push_back(id);
}
else if(times==1){
res2.push_back(id);
}
}
return {res1,res2};
}
};
T3、T4暂时性放弃一会会。