LeetCode商汤专场——第216场周赛题解

目录

T1.5605.检查两个字符串数组是否相等

T2.5606.具有给定数值的最小字符串

T3.5607.生成平衡数组的方案数

T4.5608.完成所有任务的最少初始能量


前言:翻了一下前面的博客记录,上一篇还是10月24号程序员节发的blog,已经快过去一个月了。这一个月过得真快,更新的频率慢了,其实不少想写的正在路上,瞄一眼草稿箱:

好几篇文章尽快打磨一下,争取早日发出来!

这个月导师给了毕设题目,图形学方向的,对自己来说又是一个全新的领域,未来的挑战还是不少啊!这几个周末要不就是陪女票,要不就是出差,连续缺席了好几场周赛呀,以后周赛的习惯还是不能丢,再忙也不可能一周连一小时比赛的时间都没有呀!

其实这场周赛我只参加了前两题,昨天深夜和女票吵了一架,入睡估计都两三点了,来实验室比赛已经快十一点。A了两题之后,实验室坐我后面的大佬非要拉我去和他一起聚餐吃饭……后面两题还是下午来补的,rank啥的已经不重要了,又废了废了哎……

总之,菜一点没关系,心态好就行!继续加油呀!


T1.5605.检查两个字符串数组是否相等

有手就行的题,不说了。。。。

class Solution {
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
        string s1, s2;
        for (auto word : word1) {
            s1 += word;
        }
        for (auto word : word2) {
            s2 += word;
        }
        return s1 == s2;
    }
};

T2.5606.具有给定数值的最小字符串

很明显的是贪心,贪心法则:字符串前面填入尽量多的a,后面填入尽量多的z,最后再将剩下的填充到中间

class Solution {
public:
    string getSmallestString(int n, int k) {
        // 贪心法则:字符串前面填入尽量多的a,后面填入尽量多的z
        string a, z;
        // 先放a
        int num = 0;
        while ((n - num - 1) * 26 >= k) {
            num++;
            k--;
            a += 'a';
        }
        while (k) {
            // 再放末尾z
            if (k >= 26) {
                z += 'z';
                k -= 26;
            } else {    // 最后放中间剩下的字符
                z = char('a' + k - 1) + z;
                break;
            }
        }
        return a + z;
    }
};

T3.5607.生成平衡数组的方案数

前缀和模拟一遍,特别注意每次删除对应的元素之后,下标会改变,具体看代码

class Solution {
public:
    int waysToMakeFair(vector<int>& nums) {
        // 前缀和暴力模拟
        int ans = 0;
        int odd[nums.size() + 1];
        int even[nums.size() + 1];
        odd[0] = even[0] = 0;
        for (int i = 1; i <= nums.size(); i++) {
            odd[i] = odd[i - 1] + ((i - 1) % 2 != 0 ? nums[i - 1] : 0);
            even[i] = even[i - 1] + ((i - 1) % 2 == 0 ? nums[i - 1] : 0);
        }
        for (int i = 1; i <= nums.size(); i++) 
            ans += ((odd[i - 1] + (even[nums.size()] - even[i])) == (even[i - 1] + (odd[nums.size()] - odd[i])));

        return ans;
    }
};

T4.5608.完成所有任务的最少初始能量

按照惯例溜号,这次还是被动溜号,上一个大佬的代码,供参考:https://leetcode-cn.com/problems/minimum-initial-energy-to-finish-tasks/solution/wan-cheng-suo-you-ren-wu-de-zui-shao-chu-shi-neng-/

class Solution {
public:
    int minimumEffort(vector<vector<int>>& tasks) {
        sort(tasks.begin(), tasks.end(), [](const auto& u, const auto& v) {
            return u[0] - u[1] < v[0] - v[1];
        });
        int p = 0;
        int suma = 0;
        for (const auto& task: tasks) {
            p = max(p, suma + task[1]);
            suma += task[0];
        }
        return p;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/109953933