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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值