前面的话
第一次参加Leetcode周赛
这次参加了周日上午十点半的第366次周赛。
在平板上打的,还没开code-server,直接用网站的在线编辑器。
开打的时候还在上着C语言理论课,不得不说这个老师还挺开明。
认为自己掌握了可以直接不来上课,让舍友帮忙签到(原话)。
如果来了就别迟到或者早退,此外在课上干什么都可以。
在这样的背景下就可以上课打lc周赛了。
对比一些老师,真的是课越水抓得越严。C语言和高数这两节课老师根本不抓,每次前排都能坐满。
比赛结果
只能做出简单的前两题。
第一题还因为写反一个变量阴沟翻船了。
题目
T1
题面
分类求和并作差
给你两个正整数 和 。
现定义两个整数 和 ,如下所示:
:范围 内所有 无法被 整除 的整数之和。
:范围 内所有 能够被 整除 的整数之和。
返回整数 。
分析
一眼想到的思路就是把列出来判断奇偶相加就行了。
虽然这种太有规律的题肯定可以用数学公式推出来,但竞赛毕竟是看用时的,所以直接暴力枚举秒了。
(第一次提交的时候把sum1和sum2对应的含义弄反了,痛吃罚时5min。希望AK杯的时候不要犯这种低级错误了!)
代码
1 | class Solution { |
T2
题面
你有 颗处理器,每颗处理器都有 个核心。现有 个待执行任务,每个核心只执行一个任务。
给你一个下标从 开始的整数数组 ,表示每颗处理器最早空闲时间。另给你一个下标从 开始的整数数组 ,表示执行每个任务所需的时间。返回所有任务都执行完毕需要的最小时间 。
注意:每个核心独立执行任务。
1 | 输入:processorTime = [8,10], tasks = [2,2,3,1,8,7,4,5] |
分析
看上去有点复杂呢,什么处理器都出来了。
分析一下样例,很容易能注意到:
要使执行任务最短,要让CPU最早空闲时间大的去匹配任务用时小的,任务用时大的要用CPU最早空闲小的。
那么可以用贪心思路解决了。
先把这两个数组排序。
一个从大到小,一个从小到大。
再每四个任务跟一个处理器匹配。
保存最长任务用时就可以了。
(lambda表达式用在sort自定义比较参数里确实方便。看上去很高级,其实目前我这个水平使用深度来说lambda真的很简单)
代码
1 | class Solution { |
最后
这次16min完成比赛(除去罚时应该是11min的呜呜),T3感觉用搜索做,T4又是二进制哈哈。
T4应该要把1都凑在一起,但每个数都统计二进制1个数会不会有点麻烦啊。
希望下次自己能完成更多的题目吧!