Leetcode周赛

第 239 场周赛

  1. 到目标元素的最小值
    签到题

  2. 将字符串拆分为递减的连续值
    这一题没有通过很可惜了,问题在于错误理解了INT的最大值的含义,在二进制表示中INT的最大值是32位的,而在十进制中,INT的最大值是2147483647,只有10位,题目给的字符串长度最大是20

  3. 邻位交换的最小次数
    下一个排列没有想到,舍友提醒之后,对于统计交换的次数没有思考,可以采用常规贪心算法即可。

  4. 包含每个查询的最小区间
    排序+事件查询,不会做,看完题解之后直呼amazing…
    做这一题关键在于要想到先排序,然后再思考怎么排序…值得日后多多品位…

第 240 场周赛

  1. 人口最多的年份
    开数组+暴力 = 签到题

  2. 标对中的最大距离
    两个数组 + 非递增 = 双指针

  3. 子数组最小乘积的最大值
    做题的时候采用的是常规dp做得,会超时,O(n^2)
    这题的最优解是单调栈+前缀和,单调栈是我的薄弱点,做得题不多,日后要加强。
    首先题目中的关键信息是最小值,一般来说,遇到最小值,最大值这样的,单调栈是一个思考的方向。

  4. 有向图中最大颜色值
    很经典的拓扑排序的题,逻辑并不难,只要熟练掌握拓扑排序即可写出来。
    之前完全没有写过关于拓扑排序的代码,对拓扑排序只停留再理论上,所以这次自然没做出来。

第 52 场双周赛

  1. 将句子排序
    字符串处理,签到题

  2. 增长的内存泄露
    简单的模拟即可,一开始原以为有什么规律,耽误了一点时间。

  3. 旋转盒子
    同样的模拟即可,先对二维数组旋转,然后判断每一个石子的位置是否需要处理,每次处理一步,处理完之后再递归调用判断函数是否对处理后的位置还需要处理。

  4. 向下取整数对和
    找规律+统计

第 241 场周赛

  1. 找出所有子集的异或总和再求和
    dfs 递归枚举所有子集,回溯算法好久没写了,有点不熟练了、、、尴尬

  2. 构成交替字符串需要的最小交换次数
    找规律 + 统计
    这一题属实把我整懵圈了,思维还是不够,没有想到最后的接替字符串结果只有两个(一个以0打头,一个以1打头)
    如果想到这一点还是可以做出来的

  3. 找出和为指定值的下标对
    哈希map直接解决即可,变相的一维dp,贼简单,注意两个数组的长度是不一致,所以选择不同的数组存储信息会影响复杂度。
    由于先做得第二题,第三题没来得及看,亏了。

  4. 恰有 K 根木棍可以看到的排列数目
    一开始的思路是 回溯法+动态规划 (先用回溯法求全排列,再用动态规划求k个方案数) 时间复杂度O(nn!)复杂度爆炸。
    答案给的是二维动态规划
    用 dp[i][j] 表示长度为 1,2,⋯,i 的木棍且可以可以看到其中的 j 根木棍的方案数
    状态转移方程为:dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
    (i-1)
    复杂度为O(nk)

第 242 场周赛

  1. 哪种连续子字符串更长
    签到题,一次遍历即可,遍历的过程中动态更新 1 串和 0 串的长度即可。

  2. 准时到达的列车最小时速
    二分查找基础题,没有难度

  3. 跳跃游戏 VII
    使用了双指针模拟,一个min指针指向最短到达的位置,一个max指针指向最远到达的地方,然后通过了 119/123个测试用例,醉了

这道题有两种解法:

  • 前缀和+动态规划
  • 滑动窗口+动态规划
  1. 石子游戏 VIII
    前缀和+逆序动态规划

第 254 场周赛

  1. 作为子字符串出现在单词中的字符串数目
    签到题,考点是字符串的匹配。题解给了KMP算法,比赛应该没人用KMP吧。。。调接口实现只需要几行代码就好了。。。

  2. 构造元素不等于两相邻元素平均值的数组
    这道题想出来了,但是没有完全想出来。
    因为没有完全想出来所以想了一个回溯算法,类似全排列。。。很尴尬
    最后还是用一开始的思路写出来了

此处有一处坑需要注意:

1
2
double curr = ((double)nums[i-1]+(double)nums[i+1])/2;
double curr = (nums[i-1]+nums[i+1])/2;

这两行代码得到的 curr 的值有时候是不一样的。。。。

  1. 数组元素的最小非零乘积
    这题做不出来。
    题解:数学推导+快速幂运算
  1. 你能穿过矩阵的最后一天
    二分查找 + 广度优先搜索

第 255 场周赛

  1. 找出数组的最大公约数
  1. 找出不同的二进制字符串
  1. 最小化目标值与所选元素的差
  1. 从子集的和还原数组