6055. 转化时间需要的最少操作数
-
题目大意
给定两个以 H H : M M HH:MM HH:MM形式的时间,问一个时间经过+60, +15, +5, +1 这4种操作最少操作多少次到达另一个时间。(输入保证第一个时间小于第二个时间)。 -
思路
-
code
class Solution {
public:
int convertTime(string current, string correct) {
int a = current[0]*600+current[1]*60+current[3]*10+current[4];
int b = correct[0]*600+correct[1]*60+correct[3]*10+correct[4];
int ans=0,now=b-a;
ans+=now/60;
now%=60;
ans+=now/15;
now%=15;
ans+=now/5;
now%=5;
ans+=now;
return ans;
}
};
5235. 找出输掉零场或一场比赛的玩家
- 题目大意
给定n组比赛结果,输出那些人没有输过,那些人只输过一场比赛。 - 思路
map来做,要注意STL容器的开法。 - code
class Solution {
public:
vector<vector<int>> findWinners(vector<vector<int>>& matches) {
map<int,int> win,all;
int n = matches.size();
for(int i=0;i<n;i++)
{
all[matches[i][0]]++;
all[matches[i][1]]++;
win[matches[i][0]]++;
}
vector<vector<int>> ans(2);
for(auto [u,v]:all)
{
if(v==win[u]) ans[0].push_back(u);
if(v==win[u]+1) ans[1].push_back(u);
}
return ans;
}
};
5219. 每个小孩最多能分到多少糖果
- 题目大意
有n堆糖果,有k个小孩,每堆糖果开始拆成几堆,但是不能合并到一起,一个小孩分一堆糖果。问要使每个小孩分到的糖果数一致,最多可以分到多少个。 - 思路
二分答案,然后 O ( n ) O(n) O(n)判断是否合法。 - code
class Solution {
public:
int maximumCandies(vector<int>& candies, long long k) {
#define ll long long
int n = candies.size();
ll r=0,l=0,all=0;
for(int i=0;i<n;i++) all+=candies[i];
r=all;
ll ans=0;
while(l<=r)
{
ll mid=(l+r)>>1;
if(mid==0) {l=mid+1;continue;}
ll num=0;
for(int i=0;i<n;i++)
{
num+=candies[i]/mid;
}
if(num>=k) l=mid+1,ans=max(mid,ans);
else r=mid-1;
}
return ans;
}
};
5302. 加密解密字符串
- 题目大意
1.输入一个字符串word1进行encrypt(加密)操作:将word1中每一个字符在keys中对应的下标i替换成values[i],加密的结果为将word1中所有字符都替换之后的结果。
2.将输入一个字符串word2进行decrypt(解密)操作:将word2中每两个字符一组对应的子串t,找出values[i]==t,用keys[i]替换t,可能会出现多种对应,因此输出解密后的结果为:进行替换后的结果在dictionary中出现了多少次。 - 思路
加密操作比较简单:将keys用map从keys[i]映射到i,这样可以 O ( l o g n ) O(logn) O(logn)找到每个字符对应的下标,然后遍历一遍word1,用values替换即可。
解密操作,可以考虑预处理:dictionary中每个单词经过加密得到的结果存到map中,映射为出现了多少次,这样便例word2时就可以直接用map O ( l o g n ) O(logn) O(logn)找到s解密后在dictionary中出现了几次。 - code
class Encrypter {
array<string, 26> mp;
unordered_map<string, int> cnt;
public:
Encrypter(vector<char> &keys, vector<string> &values, vector<string> &dictionary) {
for (int i = 0; i < keys.size(); ++i)
mp[keys[i] - 'a'] = values[i];
for (auto &s : dictionary)
++cnt[encrypt(s)];
}
string encrypt(string word1) {
string res;
for (char ch : word1) {
auto &s = mp[ch - 'a'];
if (s == "") return "";
res += s;
}
return res;
}
int decrypt(string word2)
{
if(cnt.count(word2)) return cnt[word2];
else return 0;
}
};
/*
* Your Encrypter object will be instantiated and called as such:
* Encrypter* obj = new Encrypter(keys, values, dictionary);
* string param_1 = obj->encrypt(word1);
* int param_2 = obj->decrypt(word2);
*/