LeetCode笔记:Biweekly Contest 107

这篇具有很好参考价值的文章主要介绍了LeetCode笔记:Biweekly Contest 107。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • LeetCode笔记:Biweekly Contest 107
    • 1. 题目一
      • 1. 解题思路
      • 2. 代码实现
    • 2. 题目二
      • 1. 解题思路
      • 2. 代码实现
      • 3. 算法优化
    • 3. 题目三
      • 1. 解题思路
      • 2. 代码实现
    • 4. 题目四
      • 1. 解题思路
      • 2. 代码实现
  • 比赛链接:https://leetcode.com/contest/biweekly-contest-107/

1. 题目一

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

  • 2744. Find Maximum Number of String Pairs

1. 解题思路

这一题由于每一个字符串都是unique的,因此事实上问题就被大幅简化了,我们只需要找到所有的反字符串同样出现过的,且其反不为自身的字符串的个数除以2即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maximumNumberOfStringPairs(self, words: List[str]) -> int:
        s = set(words)
        res = 0
        for w in words:
            if w != w[::-1] and w[::-1] in s:
                res += 1
        return res // 2

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

2. 题目二

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

  • 2745. Construct the Longest New String

1. 解题思路

这一题感觉应该是可以直接写出答案的,不过可惜的是我没有想到很好的思路,不过考虑到题目限制了string的个数,因此我暴力地采用动态规划的方式强行枚举求出了答案……

2. 代码实现

给出python代码实现如下:

class Solution:
    def longestString(self, x: int, y: int, z: int) -> int:
        
        @lru_cache(None)
        def dfs(x, y, z, pre):
            res = 0
            if pre == "AA":
                if y > 0:
                    res = max(res, 2 + dfs(x, y-1, z, "BB"))
            elif pre == "BB" or pre == "AB":
                if x > 0:
                    res = max(res, 2 + dfs(x-1, y, z, "AA"))
                if z > 0:
                    res = max(res, 2 + dfs(x, y, z-1, "AB"))
            else:
                if x > 0:
                    res = max(res, 2 + dfs(x-1, y, z, "AA"))
                if y > 0:
                    res = max(res, 2 + dfs(x, y-1, z, "BB"))
                if z > 0:
                    res = max(res, 2 + dfs(x, y, z-1, "AB"))
            return res
        
        return dfs(x, y, z, "")

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

3. 算法优化

不过如前所述,这道题应该是有直接的解法的,想清楚了应该可以直接手写答案,事实上看其他大佬们的解答看起来就是,当前执行效率最高的代码耗时仅56ms,其算法便是如此:

class Solution:
    def longestBeautifulString(self, x: int, y: int, z: int) -> int:
        return (z + min(x, y+1) + min(x+1, y)) * 2

不过可惜的是,暂时我还没有想明白其中的解释,因此只是先在此摘录一下,后续还需要细想一下。

3. 题目三

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

  • 2746. Decremental String Concatenation

1. 解题思路

这一题我的思路同样是使用动态规划,这里就不赘述了,直接给出代码如下。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minimizeConcatenatedLength(self, words: List[str]) -> int:
        n = len(words)
        s = sum(len(w) for w in words)
        
        @lru_cache(None)
        def dp(idx, st, ed):
            if idx >= n:
                return 0
            
            if st == words[idx][-1]:
                s1 = 1 + dp(idx+1, words[idx][0], ed)
            else:
                s1 = dp(idx+1, words[idx][0], ed)
            
            if ed == words[idx][0]:
                s2 = 1 + dp(idx+1, st, words[idx][-1])
            else:
                s2 = dp(idx+1, st, words[idx][-1])
            
            return max(s1, s2)
        
        return s - dp(1, words[0][0], words[0][-1])

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

4. 题目四

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

  • 2747. Count Zero Request Servers

1. 解题思路

这一题我最开始的思路是使用segment tree,毕竟范围内求值这个范式太接近于segment tree了,这个思路是可行的,但是不幸遇上了超时。

后来仔细一想,发现自己想复杂了,维护一个时间窗口,然后通过滑动时间窗口的方式直接对范围内有请求的server进行记录和维护即可……

难怪只是一道medium的题目,不过居然只有这么少的人提交了也是有点奇怪……

2. 代码实现

给出python代码实现如下:

class Solution:
    def countServers(self, n: int, logs: List[List[int]], x: int, queries: List[int]) -> List[int]:
        logs = sorted(logs, key=lambda x: x[1])
        m = len(logs)
        
        queries = [(idx, t) for idx, t in enumerate(queries)]
        queries = sorted(queries, key=lambda x: x[1])
        res = [0 for _ in queries]
        
        i, j = 0, 0
        cnt = {}
        for idx, t in queries:
            while j < m and logs[j][1] <= t:
                server = logs[j][0]
                if server in cnt:
                    cnt[server] += 1
                else:
                    cnt[server] = 1
                j += 1
            while i < m and logs[i][1] < t-x:
                server = logs[i][0]
                cnt[server] -= 1
                if cnt[server] == 0:
                    cnt.pop(server)
                i += 1
            res[idx] = n - len(cnt)
        return res

提交代码评测得到:耗时1635ms,占用内存79MB。文章来源地址https://www.toymoban.com/news/detail-515806.html

到了这里,关于LeetCode笔记:Biweekly Contest 107的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode笔记:Weekly Contest 360

    LeetCode笔记:Weekly Contest 360 0. 吐槽 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 比赛链接:https://leetcode.com/contest/weekly-contest-360/ 这次的题目真的是,一言难尽,难倒是不难,就是各种

    2024年02月11日
    浏览(37)
  • LeetCode笔记:Weekly Contest 354

    LeetCode笔记:Weekly Contest 354 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 比赛链接:https://leetcode.com/contest/weekly-contest-354/ 给出题目一的试题链接如下: 2778. Sum of Squares of Special Elements

    2024年02月16日
    浏览(34)
  • LeetCode笔记:Weekly Contest 357

    LeetCode笔记:Weekly Contest 357 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 比赛链接:https://leetcode.com/contest/weekly-contest-357 给出题目一的试题链接如下: 2810. Faulty Keyboard 1. 解题思路 这一题就是按照题目给出的条

    2024年02月14日
    浏览(36)
  • LeetCode笔记:Weekly Contest 359

    LeetCode笔记:Weekly Contest 359 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 比赛链接:https://leetcode.com/contest/weekly-contest-359 给出题目一的试题链接如下: 2828. Check if a String Is an Acronym of

    2024年02月12日
    浏览(35)
  • 第 107 场LeetCode双周赛

    A 最大字符串配对数目 显然各字符串对 间匹配的先后顺序不影响最大匹配数目, 可以从后往前遍历数组, 判断前面是否有和当前末尾构成匹配的. B 构造最长的新字符串 记忆化搜索: 定义状态 p a a , b b , a b , l a s t p_{aa,bb,ab,last} p aa , bb , ab , l a s t ​ 为剩余三种字符串分别为aa、

    2024年02月11日
    浏览(44)
  • LeetCode.107. 二叉树的层序遍历 II

    107. 二叉树的层序遍历 II 这个题目考查的是二叉树的层序遍历,对于二叉树的层序遍历,我们需要借助 队列 这种数据结构。再来回归本题 ,我们只需要将 二叉树的层序遍历的结果逆序,就可以得到这道题我们要求的答案了。接下来我们的难题就是 如何实现二叉树的层序遍

    2024年02月21日
    浏览(57)
  • 【LeetCode】102. 二叉树的层序遍历、107. 二叉树的层序遍历 II

     作者:小卢 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》 102. 二叉树的层序遍历 给你二叉树的根节点  root  ,返回其节点值的  层序遍历  。 (即逐层地,从左到右访问所有节点)  示例:

    2024年02月13日
    浏览(40)
  • 37. 解数独 - 力扣(LeetCode)

    题目描述 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。 输入

    2024年01月24日
    浏览(38)
  • 455. 分发饼干 - 力扣(LeetCode)

    假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] = g[i],我们可以将这个饼干 j 分配给孩子 i ,这

    2024年01月25日
    浏览(47)
  • 【LeetCode力扣】42. 接雨水

    目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、双指针法     原题链接: 42. 接雨水 - 力扣(LeetCode)   示例 1:   输入: height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解释: 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包