【LeetCode刷题笔记】力扣杯2022春季竞赛记录


??第一次参加竞赛,感触比较深,遂写随笔记录一下。
??在刷了300多道题目以后,虽然是第一次参加竞赛,但还是比较得心应手的,完成了3道题目,名次排在400名,不过还有很大的提升空间。

??竞赛题目与平时刷题主要有以下不同:

?1. 更加接近面试时候的情况,在有时限的情况下,会比平时更紧张;
?2. 虽然可以在本地ide编辑,但遇到一些内置的类,不方便在本地编辑,而且没有测试用例的正确答案可供调试;
?3. 提交时如果是错误解答将会增加用时,所以每次提交都要谨慎;
? 4. 比较好的一点是没有对测试用时有严格要求,很多简单题都是可以直接用暴力方法求解的,而且在这种限时环境下,暴力法也是性价比最高的,可以在比赛结束后再对代码进行优化。

??本次赛题只做出了前三题,第一题比较简单就不说了。
??第二题,一开始拿到并没有思路,或者说是由于第一次参加比赛,没有直接尝试暴力法的果断。

https://leetcode-cn.com/contest/season/2022-spring/problems/UEcfPD/
??题目2的限制如上,由于数据规模不大,且每种料理只能只做一次,直接用暴力法是可以求解的,使用一个数的二进制表示某个食材是否做了,就可以遍历从0到这个数,从而遍历所有情况。


https://leetcode-cn.com/contest/season/2022-spring/problems/QO5KpG/

?? 第三题是中等题,题目本身并不难懂,难在数据规模上。由于数据规模达到10^5,直接模拟显然是不行的,但是可以用一个List数组逆序模拟,因为染色有先后顺序,后染色会覆盖前面的染色,相当于如果把后面染色的去除掉,就可以减少处理时间。整体思路如下:
?? 先中序遍历二叉树,形成list有序数组,逆序遍历操作步骤,如果是染蓝色,则直接去除掉对应元素,如果是染红色,则边删除边计数。在删除过程中有个小技巧,先用二分查找找到距离最小元素最近的元素,然后挨个删除,直到删除到最大元素。