[LeetCode周赛复盘] 第 111 场双周赛20230819

这篇具有很好参考价值的文章主要介绍了[LeetCode周赛复盘] 第 111 场双周赛20230819。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、本周周赛总结

  • T1 对向双指针。
  • T2 子序列/同向双指针。
  • T3 LIS/状态DP。
  • T4 数位DP。
    [LeetCode周赛复盘] 第 111 场双周赛20230819,力扣周赛复盘,leetcode,算法,职场和发展

2824. 统计和小于目标的下标对数目

2824. 统计和小于目标的下标对数目

1. 题目描述

[LeetCode周赛复盘] 第 111 场双周赛20230819,力扣周赛复盘,leetcode,算法,职场和发展

2. 思路分析

这里只讨论O(n)做法。
  • 类似两数之和,由于顺序无关,把数据排序。
  • 设置l,r=0,n-1。
  • 若a[l]+a[r]<target,则a[l]+ 任意a[l+1…r]都<target。则这r-l个数都可以和l组队。

3. 代码实现

class Solution:
    def countPairs(self, nums: List[int], target: int) -> int:
        nums.sort()
        ans = left = 0
        right = len(nums) - 1
        while left < right:
            if nums[left] + nums[right] < target:
                ans += right - left
                left += 1
            else:
                right -= 1
        return ans

2825. 循环增长使字符串子序列等于另一个字符串

2825. 循环增长使字符串子序列等于另一个字符串

1. 题目描述

[LeetCode周赛复盘] 第 111 场双周赛20230819,力扣周赛复盘,leetcode,算法,职场和发展

2. 思路分析

  • 子序列问题,都有个贪心思想:当前能匹配就匹配,匹配不了再看下一个。
  • 一般外层循环更长的那个,代码会好写一些。

3. 代码实现

class Solution:
    def canMakeSubsequence(self, str1: str, str2: str) -> bool:
        n = len(str2)
        j = 0 
        for c in str1:
            if j < n:
                d = ord(c)+1
                if d > ord('z'):
                    d = ord('a')
                if c == str2[j] or chr(d) == str2[j]:
                    j += 1     
        return j == n

2826. 将三个组排序

2826. 将三个组排序

1. 题目描述

[LeetCode周赛复盘] 第 111 场双周赛20230819,力扣周赛复盘,leetcode,算法,职场和发展

2. 思路分析

  • 本质是LIS,如果k不是3而是更大的1e4,则只能LIS。
  • 状态机DP可以用RMQ来优化,本身也是LIS的另一种做法。

3. 代码实现

class Solution:
    def minimumOperations(self, nums: List[int]) -> int:        
        dp = []
        for v in nums:
            if not dp or v >=dp[-1]:
                dp.append(v)
            else:
                p = bisect_right(dp,v)
                dp[p] = v
        return len(nums)-len(dp)
        # n = len(nums)
        # f = [1]*n 
        # for i in range(1,n):
        #     for j in range(i):
        #         if nums[i] >= nums[j]:
        #             f[i] = max(f[i],f[j]+1)
        # return len(nums) - max(f)                

2827. 范围中美丽整数的数目

2827. 范围中美丽整数的数目

1. 题目描述

[LeetCode周赛复盘] 第 111 场双周赛20230819,力扣周赛复盘,leetcode,算法,职场和发展文章来源地址https://www.toymoban.com/news/detail-672417.html

2. 思路分析

 数位DP+前缀和作差
  • 条件有两个:奇数偶数个数相同、被k整除。
  • 第一个条件可以向后传递两个个数。
  • 第二个条件可以用同余向后传递,即(p*10+j)%k
  • 剩下的就是套板子。

  • 注意这里is_num我省略了,因为可以用even和odd来检查。
  • 灵神的写法是不省略is_num,但even和odd压缩成一个diff。差不多。

3. 代码实现

class Solution:
    def numberOfBeautifulIntegers(self, low: int, high: int, k: int) -> int:

        def f(s):
            n = len(s)

            @cache
            def f(i, p, even, odd, is_limit):
                if i == n:
                    return int(even+odd>0 and even == odd and p == 0)
                up = int(s[i]) if is_limit else 9
                down = 0 if even+odd else 1
                ans = 0
                if not even+odd:
                    ans += f(i + 1, 0, 0, 0, False)
                for j in range(down, up + 1):
                    ans += f(i + 1, (p * 10 + j) % k, even + (not j & 1), odd + (j & 1), is_limit and j == up)

                return ans

            return f(0, 0, 0, 0, True)

        return f(str(high)) - f(str(low - 1))
     

参考链接

到了这里,关于[LeetCode周赛复盘] 第 111 场双周赛20230819的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【力扣周赛】第350场周赛

    题目描述 描述:卡车有两个油箱。给你两个整数,mainTank 表示主油箱中的燃料(以升为单位),additionalTank 表示副油箱中的燃料(以升为单位)。 该卡车每耗费 1 升燃料都可以行驶 10 km。每当主油箱使用了 5 升燃料时,如果副油箱至少有 1 升燃料,则会将 1 升燃料从副油箱

    2024年02月09日
    浏览(54)
  • 【力扣周赛】第 352 场周赛

    第 352 场周赛 2760. 最长奇偶子数组 提示: 1 = nums.length = 100 1 = nums[i] = 100 1 = threshold = 100 因为数据范围特别小,所以怎么暴力都是无所谓的。 继续优化 可以发现,每个满足条件的子数组是不会重叠的, 所以在枚举 l 的时候,每次可以将下一个 l 设置成 r。 代码如下: 2761. 和

    2024年02月12日
    浏览(35)
  • 【力扣周赛】第357场周赛

    题目描述 描述:你的笔记本键盘存在故障,每当你在上面输入字符 ‘i’ 时,它会反转你所写的字符串。而输入其他字符则可以正常工作。 给你一个下标从 0 开始的字符串 s ,请你用故障键盘依次输入每个字符。 返回最终笔记本屏幕上输出的字符串。 示例 1: 示例 2: 提示

    2024年02月13日
    浏览(33)
  • 【力扣周赛】第 357 场周赛(⭐反悔贪心)

    https://leetcode.cn/contest/weekly-contest-357/ https://leetcode.cn/problems/faulty-keyboard/ 提示: 1 = s.length = 100 s 由小写英文字母组成 s[0] != \\\'i\\\' 遇到 ‘i’ 翻转已有的字符串,其它字符直接添加即可。 用一个变量维护当前翻转了几次,来决定新来的字符添加在开头还是结尾。 https://leetcode.cn

    2024年02月09日
    浏览(38)
  • 力扣周赛日记350

    早上兴高采烈起床写周赛,结果写完两题开始坐牢。菜的很。 LeetCode 第 350 场周赛 LeetCode 6901. 总行驶距离 2.1.1 题意 卡车两个油箱,耗油1L行驶10km。油箱A耗5L,油箱B给邮箱A油1L。油箱A空后停止行驶,求可行使距离。 2.1.2 分析 开始想O(1)解法,发现这题主要问题在油箱B给了油箱

    2024年02月10日
    浏览(39)
  • 力扣119双周赛

    模拟 贪心,一个变了下一个肯定不用变 滑动窗扣维持k个 二进制枚举+Floyd –

    2024年02月04日
    浏览(38)
  • 第 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 122双周赛 解题思路+代码

    本人水平有限,只做出3道,最后1道放弃。 给你一个长度为 n 的整数数组 nums 。 一个数组的 代价 是它的 第一个 元素。比方说,[1,2,3] 的代价是 1 ,[3,4,1] 的代价是 3 。 你需要将 nums 分成 3 个 连续且没有交集 的子数组。 请你返回这些子数组的 最小 代价 总和 。 示例 1: 输

    2024年02月20日
    浏览(42)
  • LeetCode---121双周赛---数位dp

    2996. 大于等于顺序前缀和的最小缺失整数 2997. 使数组异或和等于 K 的最少操作次数 2998. 使 X 和 Y 相等的最少操作次数 2999. 统计强大整数的数目 简单的模拟题,只要按照题目的要求去写代码即可,代码如下 这题考异或的性质---相同为0,相异为1,我们只要关心nums的异或和与

    2024年01月22日
    浏览(56)
  • [LeetCode108双周赛&LeetCode353周赛] 学习用记忆化搜索解决 DP 问题

    参考灵神直播和代码 @cache 装饰器的作用:将传入不同参数得到的函数值存储到缓存,避免下次传递相同参数重复计算结果,可用于解决递归函数重复计算问题,比如递归求斐波那契问题。 https://leetcode.cn/problems/maximum-number-of-jumps-to-reach-the-last-index/ 记忆化搜索 dfs(i) 表示以

    2024年02月13日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包