Leetcode--2021.6.20周赛

emmm,今天的周赛还是很菜,今天还是很粗心,很急躁,不知道什么时候才能彻底改掉这些毛病。今天的题其实比之前的比赛都要简单,至少看的明白,有思路,但是自己太急躁,没读懂题意就瞎写,导致在第一个题花费了大量时间,根本没时间做后面两个。。。以后要注意克服自己急躁的情绪了,最近太浮躁了。。

第一题

Leetcode--2021.6.20周赛

思路

第一题其实非常简单,后面想明白后恨不得给自己一个大嘴巴子。。。因为判断的是字符串中最大的奇数,所以直接从字符串的右侧,一个一个的检测当前所指向的数字是否是奇数即可,其实没有那么多的花里胡哨,最开始做题的时候自己想的过于复杂。。。
直接看代码吧。

代码

class Solution {
    public String largestOddNumber(String num) {
        int r = num.length()-1;
        while (r>=0)
        {
            if ((num.charAt(r)-'0')%2==0)
                r--;
            else
                return num.substring(0,r+1);
        }
        return "";
    }
}

第二题

Leetcode--2021.6.20周赛

思路

这一题也很简单,唯一要注意的就是,当开始时间的小时数和结束时间的小时数相等时,需要进行判断这是一天还是两天(第一次提交没注意,就被坑了),其他的就没啥了,按部就班做就行。
算法步骤:

  1. 开始时间结束时间的字符串中分别截取对应的小时数h1、h2和分钟数m1、m2
  2. 分情况开始讨论:如果h1<h2证明在同一天内,直接ans=(h2-h1-1)*4;ans += (60-m1)/15;ans+=m2/15即为答案;如果h1>h2证明不在同一天内,直接ans=(24-h1-1+h2)*4;ans += (60-m1)/15;ans+=m2/15即为答案;如果h1=h2需要分情况进行讨论——如果m1<m2证明在同一天内,根据m1和m2的值计算得到ans即可;如果m1>m2证明不在同一天内,ans = 23 * 4; ans += (60-m1)/15; ans += m2/15即可。

代码

public int numberOfRounds(String startTime, String finishTime) {
        int h1 = Integer.parseInt(startTime.substring(0,2)) ;
        int m1 = Integer.parseInt(startTime.substring(3,5)) ;
        int h2 = Integer.parseInt(finishTime.substring(0,2)) ;
        int m2 = Integer.parseInt(finishTime.substring(3,5)) ;

        int ans = 0;

        if (h1 < h2){
            ans = (h2-h1-1)*4;
            ans += (60-m1)/15;
            ans += m2/15;
        }
        if (h1 > h2)
        {
            ans = (24-h1-1 + h2)*4;
            ans += (60-m1)/15;
            ans += m2/15;
        }
        if (h1==h2)
        {
            if (m1<m2)
            {
                if (m1<=15)
                    ans = (m2-15)/15;
                if (m1 > 15 && m1 <= 30)
                    ans = (m2-30)/15;
                if (m1>30 && m1<=45)
                    ans = (m2-30)/15;
            }
            if (m2 < m1)
            {
                ans = 23 * 4;
                ans += (60-m1)/15;
                ans += m2/15;
            }
        }
        return ans>=0?ans:0;
    }

第三题

Leetcode--2021.6.20周赛
Leetcode--2021.6.20周赛

思路

没来得及看。。以后有时间再来补充

代码

第四题

Leetcode--2021.6.20周赛
Leetcode--2021.6.20周赛

思路

因为涉及的数据量比较大,又涉及到区间的重复查询,所以采用类似于前缀和等预处理方法效果比较好。

最开始因为示例给的比较特殊再加上没有理解题意,我对相邻的两个值的差绝对值进行了预处理,然后查询时直接在ans中查询即可,因为示例给的比较特殊,所以示例测试没有任何问题,提交后才发现是是区间内任意两个元素的差绝对值的最小值。。。太坑人了

因为时间不够了,所以没有想到新的预处理方法,以后有时间再来补充。。。

代码

上一篇:CSS基础知识5


下一篇:2. CSS三种导入方式