这是第一次参加力扣的周赛,四道题,题目分别如下:
分别对应3、4、5、6分
1.当时第一题用了4:52,罚时一次,因为没有考虑到除零异常。
题目如下:
很多人通过两次判断,分别除2判断,除3判断,我当时直接除6进行判断
代码如下:
class Solution {
public int averageValue(int[] nums) {
int res = 0;
int n = 0;
for (int i = 0; i < nums.length; i ++) {
if (nums[i] % 6 == 0) {
res += nums[i];
n ++;
}
}
if (n == 0) return 0;
return res/n;
}
}
2.第二题是思维题,当时想到了两个哈希Map来操作,因为考虑到了太多,又创建了内部类,导致时间不够,官方使用两个哈希Map来解决问题。
题目如下:
官方解题代码:
public:
vector<vector<string>> mostPopularCreator(vector<string>& creators, vector<string>& ids, vector<int>& views) {
int n = creators.size();
// 记录每个作者的播放量总和
unordered_map<string, long long> mp1;
// 记录每个作者播放量最大视频的下标
unordered_map<string, int> mp2;
for (int i = 0; i < n; i++) {
// 更新播放量总和
mp1[creators[i]] += views[i];
// 更新最大播放量下标
if (mp2.count(creators[i])) {
int &t = mp2[creators[i]];
if (views[i] > views[t] || (views[i] == views[t] && ids[i] < ids[t])) t = i;
} else {
mp2[creators[i]] = i;
}
}
// 求最大播放量总和
long long mx = -1;
for (auto it = mp1.begin(); it != mp1.end(); it++) mx = max(mx, it->second);
// 计算答案
vector<vector<string>> ans;
for (auto it = mp1.begin(); it != mp1.end(); it++) if (it->second == mx) ans.push_back({it->first, ids[mp2[it->first]]});
return ans;
}
};
第三题,当时罚时三次,不过还是AC了。
题目如下:
我的代码:
// 我的代码
class Solution {
public long makeIntegerBeautiful(long n, int target) {
long res = 0;
int temp = 0;
boolean flag = true;
boolean fl = false;
while (flag) {
char[] chars = String.valueOf(n).toCharArray();
for (int i = 0; i < chars.length; i++) {
temp += chars[i]-'0';
if (temp > target) {
StringBuilder sb = new StringBuilder();
long f = 1;
for (int j = i; j < chars.length; j++) {
sb.append(chars[j]);
f *= 10;
}
long addNum = f - Long.parseLong(sb.toString());
temp = 0;
res += addNum;
n += addNum;
fl = true;
break;
}
fl = false;
}
if (!fl) flag = false;
}
return res;
}
}
// 大神代码
class Solution {
public int averageValue(int[] nums) {
return (int) IntStream.of(nums).filter(t -> t % 6 == 0).average().orElseGet(() -> 0);
}
}
4第四题,各位感兴趣可以去力扣详细了解,在这里不过多阐述,毕竟我还没能力看懂。。
第一次参加周赛,还是蛮高兴的,哈哈