LeetCode笔记:Weekly Contest 311

  • LeetCode笔记:Weekly Contest 311
    • 0. 小结
    • 1. 题目一
      • 1. 解题思路
      • 2. 代码实现
    • 2. 题目二
      • 1. 解题思路
      • 2. 代码实现
    • 3. 题目三
      • 1. 解题思路
      • 2. 代码实现
    • 4. 题目四
      • 1. 解题思路
      • 2. 代码实现
  • 比赛链接:https://leetcode.com/contest/weekly-contest-311/

0. 小结

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

1. 题目一

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

  • 2413. Smallest Even Multiple

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. 题目二

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

  • 2414. Length of the Longest Alphabetical Continuous Substring

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. 题目三

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

  • 2415. Reverse Odd Levels of Binary Tree

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. 题目四

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

  • 2416. Sum of Prefix Scores of Strings

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笔记,周赛311,leetcode,2413,leetcode,2414,leetcode,2415,leetcode,2416)