力扣246期

198 阅读2分钟

这是我参与更文挑战的第23天,活动详情查看:更文挑战

1903. 字符串中的最大奇数

截屏2021-06-24 下午10.32.47.png

思路分析

蔚来还是有点东西的,第一题不是那么简单。从num中获取最大的奇数,最开始作者的想法时,构建一个for循环,如果是奇数,则tmp = tmp * 10 + nums[i],如果是偶数,则重新计数,但后来根据错误用例发现,nums[i]是偶数本身也不耽误计数的,换句话说,1234的最大值是123,而不是3.

在更正这个逻辑的基础上继续写代码就会发现,int无法承载大整数的计算需求(当然,你只有试了才会知道,long也不好使)。那么我们就将目光放在了字符串本身上,我们发现在这种情况下,12345一定大于123或者大于2345,因此除非答案为空,否则我们一定是选择了第一个数字作为起点,最后一个奇数数字作为终点(对的,就是贪心)。顺着这个思路重新写for循环,得到答案。

代码

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

1904. 你完成的完整对局数

截屏2021-06-24 下午11.03.12.png

思路分析

这道题我一通ifelse后发现和答案的差很多,就直接用答案的思路了 我们可以将时间转换为分数数,如果出现通宵的情况,就将结束时间加1440(一天的分钟数),由于开始游戏和结束游戏的时间一定是15的倍数,因此有

// 对开始时间向后取整,对结束时间向前取整。
t1 = (startTime / 15 + 1) * 15;
t2 = finishTime - (finishTime  % 15);

最后根据t1 t2的时间差,除以15,就等到了答案。