LeetCode笔记:Weekly Contest 249(补发)

Posted 墨客无言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Weekly Contest 249(补发)相关的知识,希望对你有一定的参考价值。

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这一题坦率地说水的过分了,就是重复一下数组就行了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def getConcatenation(self, nums: List[int]) -> List[int]:
        return nums + nums

提交代码评测得到:耗时120ms,占用内存14.5MB。

当前最优的算法实现耗时68ms,采用的方式是使用内置的extend函数,不过本质上没啥区别。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这里,由于同排序的字符串不考虑其在原始字符串当中的位置信息,因此,我们只需要遍历所有的26个字符,找到其第一个和最后一个字符(如果其存在于该字符串当中的话),然后统计其中存在的所有的字符的种类,即为其可以组成的不同的回文字符串的数目。

对26个字符的结果进行求和即可得到最终的答案。

2. 代码实现

给出python代码实现如下:

class Solution:
    def countPalindromicSubsequence(self, s: str) -> int:
        n = len(s)
        r = s[::-1]
        res = 0
        for c in string.ascii_lowercase:
            if s.find(c) == -1:
                continue
            i, j = s.find(c), n-r.find(c)
            if i == j-1:
                continue
            res += len(Counter(s[i+1:j-1]))
        return res

提交代码评测得到:耗时584ms,占用内存15.2MB。

当前最优的算法实现耗时40ms,他的思路和我们是一样的,但是其实现方面采用的是python内置的find()rfind()方法,后续的统计也不是使用Counter的方式,而是进一步遍历,然后通过find()函数确认是否存在对应的字符。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题一开始没看清题目,当成一般的n*m问题来解了,结果就死活搞不定,感觉是一个递推问题,但是关系式死活想不出来。

后来看了答案之后惊呆了,因为发现行数最多只能是5,然后看了一下别人的解答,基本就是以列为单位进行暴力枚举,简直惊呆了……

不过这么一来题目就简单多了,只需要事先计算好每一个状态的转移矩阵,然后递推计算一下就行了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def colorTheGrid(self, m: int, n: int) -> int:
        MOD = 10**9+7
        nxt = {"init": [s for s in product([0,1,2], repeat=m) if all(s[i] != s[i+1] for i in range(m-1))]}
        for s in nxt["init"]:
            nxt[s] = [t for t in nxt["init"] if all(s[i] != t[i] for i in range(m))]
        
        @lru_cache(None)
        def dp(i, status):
            if i == n:
                return 1
            res = 0
            for s in nxt[status]:
                res = res + dp(i+1, s)
            return res % MOD
        
        return dp(0, "init")

提交代码评测得到:耗时1092ms,占用内存35.5MB。

4. 题目四

给出题目四的试题链接如下:

1. 解题思路

不想做了,直接上官方解答吧……

官方解答:合并多棵二叉搜索树

以上是关于LeetCode笔记:Weekly Contest 249(补发)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode笔记:Weekly Contest 317

LeetCode笔记:Weekly Contest 288

LeetCode笔记:Weekly Contest 299

LeetCode笔记:Weekly Contest 307

LeetCode笔记:Weekly Contest 325

LeetCode笔记:Weekly Contest 314