力扣:第 317 场周赛

这是第一次参加力扣的周赛,四道题,题目分别如下:

1.可被三整除的偶数的平均值

2.最流行的视频创作者

3.美丽整数的最小增量

4.移除子树后的二叉树高度

分别对应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第四题,各位感兴趣可以去力扣详细了解,在这里不过多阐述,毕竟我还没能力看懂。。

第一次参加周赛,还是蛮高兴的,哈哈

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风亦思雨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值