leetcode357周赛

2810. 故障键盘

核心思想:自己想的笨办法,枚举s,然后遇到i就翻转。比较好的方法就是双端队列,遇到i字母原本往后加的就往前加,然后读的时候反过来读,往前加的就往后加,读的话就从前往后,我们只需要一个tail记号就行。

leetcode357周赛_第1张图片

 2811. 判断是否能拆分数组

核心思想:自己想的就是正向去想,用递归的方法去做,然后一直做不出来就放弃了。其实你发现最后的数组要拆完,那么保证最后剩余的长度为2的都要大于等于m才行,必须所有吗,不是,只需要一个就行,只要这数组中有一个长度为2的子数组它的值大于等于m即,可通过不断拆除首尾的方法拆分完,我感觉有点难想到,然后特判一下长度为2和1即可。leetcode357周赛_第2张图片

 6951. 找出最安全路径

核心思想:其实我感觉核心思想比较简单,就是把小偷当作水源去不断扩展,然后离水源即小偷越远安全系数越高,然后去找最低安全系数高的路径。但是我自己做的时候也是仅仅停留于想法,完全不知道怎么去扩展和找了,这里的代码扩展用的是队列,然后找路径的话,是从大到小枚举安全系数,然后利用并查集的连通性来做。

leetcode357周赛_第3张图片

 2813. 子序列最大优雅度

核心思想:就是维护一个长度为k的最大优雅度的子序列。其实就是这么简单,但是因为它有两个维度导致这题就变得十分困难,自己当时完全不知道怎么操作然后放弃了。然后如何做这题,第一点就是排序,按照利润从大到小排序,先将长度为k的子序列维护起来,当第k+1个item来的时候,怎么判断它要不要放进去,放进去替代谁,(结论就是只有它去替换出现多次的项目才行,而且替换最后的多次项目),如果出现一次,或者它已经出现过了,它的加入不会增加项目类别,由于它的利润还少,所以只会降低最大优雅度。

leetcode357周赛_第4张图片

 

你可能感兴趣的:(算法,python)