Leetcode-266周赛

01 - 字符串中的最大奇数

这题比较基础,找到最靠后的一个奇数输出就可以了

class Solution {
public:
    string largestOddNumber(string num) {
        if(num.empty()) return "";
        for(int i = num.size() - 1; i >= 0; i--)
        {
            if((num[i] - '0') & 1) return num.substr(0, i + 1);
        }
        return "";

    }
};

02 - 你完成的完整对局数

这题有两个很重要学到的点,一个是字符串格式化输入输出sscanf sprintf这两个函数怎么用(很常用!)

还有就是上取整下取整别忘了,这题都转化成分钟来做就可以了

最后,有可能有负一的情况,记得额外判断一下就就好

class Solution {
public:
    int getMinute(string& time)
    {
        int x, y;
        sscanf(time.c_str(), "%d:%d", &x, &y);
        return x * 60 + y;
    }
    int numberOfRounds(string startTime, string finishTime) {
        int startMinute = getMinute(startTime), finishMinute = getMinute(finishTime);
        if(startMinute > finishMinute)
            finishMinute += 24 * 60;
        return max(0, (finishMinute) / 15 - (startMinute + 14) / 15); 
    }
};

03 - 统计子岛屿

这个题就在正常的dfs上 额外加了一个条件,探索到grid1为0,而grid2为1的时候不计数,但是仍要正常统计完

所以这里的处理就是额外增加了一个flag 去统计有没有上面这种情况发生,没有才统计一次

04 - 查询差绝对值的最小值

这个题真的学到了,主要是从数据范围出发,如果没有数据都在[1, 100]这个条件是无法摆脱双重循环枚举的,所以是o(n^2)

明天写

Last updated