LeetCode笔记:Weekly Contest 311

Posted Espresso Macchiato

tags:

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

0. 小结

这一次依然没有参加比赛,一边看英超一边打的比赛,结果发现都是暴力解居然能够把4道题全部搞定,也是有点奇葩……

1. 题目一

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

1. 解题思路

这一题其实就两种情况,如果给的数是偶数,那么这个数本身就是2的倍数,直接返回即可,反之将其乘以2然后返回即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def smallestEvenMultiple(self, n: int) -> int:
        if n % 2 == 0:
            return n
        else:
            return 2*n

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

2. 题目二

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

1. 解题思路

这一题本质上就是将字符串转换成数字之后看一下最长的连续数的个数。

2. 代码实现

给出python代码实现如下:

class Solution:
    def longestContinuousSubstring(self, s: str) -> int:
        pre = 0
        res, cnt = 0, 0
        for ch in s:
            ch = ord(ch) - ord('a')
            if ch - pre == 1:
                cnt += 1
            else:
                res = max(res, cnt)
                cnt = 1
            pre = ch
        res = max(res, cnt)
        return res

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

3. 题目三

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

1. 解题思路

这一题我的实现方法比较暴力,就是一个二次遍历,首先通过一个bfs获取所有的元素,然后用另一个bfs重新赋值一下即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def reverseOddLevels(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        nodes = []
        
        def bfs(root, depth):
            nonlocal nodes
            if root is None:
                return
            if len(nodes) == depth:
                nodes.append([])
            nodes[depth].append(root.val)
            bfs(root.left, depth+1)
            bfs(root.right, depth+1)
            return
        
        bfs(root, 0)

        def bfsv2(root, depth):
            nonlocal nodes
            if root is None:
                return
            if depth % 2 == 0:
                root.val = nodes[depth].pop(0)
            else:
                root.val = nodes[depth].pop()
            bfsv2(root.left, depth+1)
            bfsv2(root.right, depth+1)
            return
        
        bfsv2(root, 0)
        return root   

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

4. 题目四

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

1. 解题思路

这一题我一开始是通过暴力循环完成的,结果刚好可以通过测试样例,算是卡了bug吧。

后来看了一下其他大佬们的解答,发现其实有更加巧妙的解法,即使用trie树,因此,这里就只放trie树的解法了。

2. 代码实现

给出python代码实现如下:

class Trie:
    def __init__(self):
        self.trie = 
    
    def add(self, word):
        trie = self.trie
        for ch in word:
            if ch not in trie:
                trie[ch] = "val": 1
            else:
                trie[ch]["val"] += 1
            trie = trie[ch]
        return
    
    def get_score(self, word):
        res = 0
        trie = self.trie
        for ch in word:
            res += trie[ch]["val"]
            trie = trie[ch]
        return res
    
class Solution:
    def sumPrefixScores(self, words: List[str]) -> List[int]:
        trie = Trie()
        
        for w in words:
            trie.add(w)
        
        return [trie.get_score(w) for w in words]

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

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

LeetCode笔记:Weekly Contest 317

LeetCode笔记:Weekly Contest 288

LeetCode笔记:Weekly Contest 299

LeetCode笔记:Weekly Contest 307

LeetCode笔记:Weekly Contest 325

LeetCode笔记:Weekly Contest 314