LeetCode weekly contest 132
本次比赛不难,但代码实现起来不易。不容易一次写到bug-free。考察的是用编程语言处理复杂的逻辑,和各种意外情况。比如 第3题,当前一个dp为0时,长度应该更新为2,除此之外,dp+1。第四题,在各种情况下寻找分隔符时,没有找到,应该如何处理。
| Rank | Name | Score | Finish Time | Q1 (4) | Q2 (5) | Q3 (5) | Q4 (5) |
|---|---|---|---|---|---|---|---|
| 388 / 4765 | YoungForest | 24 | 1:21:20 | 0:15:54 | 0:30:16 | 0:38:05 | 1:21:20 |
| 大概需要1个小时内做完,才能进入前200。 |
第4题由于一些边界条件,我调试了不少时间。我分析花这么长时间的原因。还是写代码写的少,对变量更新的边界条件不敏感。比如string::find没有找到的时候,其他各个坐标该如何更新。我就是由于没找到的时候,返回了npos(-1), current_find_index此时应该等于end,而不是继续在-1上加分隔符的长度。
1025. Divisor Game
一道找规律的题目。
Intution:
dp。 Solution(N) = true if any Solution(N’s divisor) is false, else false。
时间复杂度: O(N^2),
空间复杂度: O(N).
1 | class Solution { |
把1~9的结果输出之后发现了了不得的规律。试了一下,一行代码就搞定了。
用数学归纳法可以证明:
前提:
N 为奇数,false;
N 为偶数,true。
- 如果N为偶数,取x=1,N-1为false。则N为True.
- 如果N为奇数,它所有的因子也必为奇数,即N-x一定为偶数,true. 则N为False。
时间复杂度: O(1),
空间复杂度: O(1).
1 | class Solution { |