[LeetCode周赛复盘] 第 359 场周赛20230820

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

一、本周周赛总结

  • T1 模拟。
  • T2 数学贪心。
  • T3 dp。
  • T4 分组+滑窗。

[LeetCode周赛复盘] 第 359 场周赛20230820,力扣周赛复盘,leetcode,算法,职场和发展

2828. 判别首字母缩略词

2828. 判别首字母缩略词

1. 题目描述

[LeetCode周赛复盘] 第 359 场周赛20230820,力扣周赛复盘,leetcode,算法,职场和发展

2. 思路分析

按题意模拟即可。

3. 代码实现

class Solution:
    def isAcronym(self, words: List[str], s: str) -> bool:
        return s == ''.join(w[0] for w in words)

2829. k-avoiding 数组的最小总和

2829. k-avoiding 数组的最小总和

1. 题目描述

[LeetCode周赛复盘] 第 359 场周赛20230820,力扣周赛复盘,leetcode,算法,职场和发展

2. 思路分析

贪心

  • 1~k-1中,选了1就不能选k-1;选了2就不能选k-2…
  • 因此可以选1~k//2
  • 剩余的从k开始向上选。

  • 可以模拟,也可以等差数列求和公式。

3. 代码实现

class Solution:
    def minimumSum(self, n: int, k: int) -> int:
        ans = 0
        p = min(n,k//2)
        ans += (1+p)*p//2
        
        ans += (k+k+n-p-1)*(n-p)//2
        return ans

2830. 销售利润最大化

2830. 销售利润最大化

1. 题目描述

[LeetCode周赛复盘] 第 359 场周赛20230820,力扣周赛复盘,leetcode,算法,职场和发展

2. 思路分析

看到值域范围,考虑用值域当下标dp。
令f[i]表示从0~i的房屋的销售最大值。

  • 枚举offers[i]=a,b,c, 只要知道f[a-1]则可以转移到f[b],f[b]=f[a-1]+b。
  • 如何知道f[a-1]呢,显然它是一个前缀最大值,那么其实可以用线段树等区间最大值的数据结构。
  • 这题还可以递推,用p记录当前a之前的最大值,那么可以把offers按左端点排序,记一下即可,然后双指针递推。

3. 代码实现

class Solution:
    def maximizeTheProfit(self, n: int, offers: List[List[int]]) -> int:
        f = [0]*n
        j = p = 0
        offers.sort()
        for a,b,c in offers:
            while j < a:
                p = max(p,f[j])
                j += 1
            f[b] = max(f[b],p+c)
        return max(f[j:])

2831. 找出最长等值子数组

2831. 找出最长等值子数组

1. 题目描述

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

2. 思路分析

  • 由于只能删除k个数,保留的数不能变,那么按值分组,记录下标。
  • 对每个组,看删除k个的窗口内,最多有几个下标。
  • 那么变长滑窗思路就出现了。
  • 枚举每个位置为窗口右边界,如果窗口内需要删除的数字超过k个,那么缩左窗。

3. 代码实现

class Solution:
    def longestEqualSubarray(self, nums: List[int], k: int) -> int:
        n = len(nums)
        g = [[] for _ in range(n+1)]
        for i,v in enumerate(nums):
            g[v].append(i)
        ans = 1 
        for a in g:
            q = deque()
            for v in a:
                q.append(v)
                while q[-1]-q[0]+1 - len(q) > k:
                    q.popleft()
                ans = max(ans,len(q))
        return ans         

参考链接

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

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

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

相关文章

  • 【力扣周赛】第 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)
  • leetcode359周赛

    滑动窗口 总长度 - 众数 k 就需要收缩窗口了。 所以需要一个数据结构统计众数: multiset 维护每一个数字的个数。 这里有一个坑 ms.erase(x) :会把所有的等于x的数字都删除。所以需要使用 auto it = ms.find(x); ms.erase(it) 来进行单个删除。 排序 + 二分 + dp 类似于学最多的课程,按照

    2024年02月12日
    浏览(38)
  • 【LeetCode周赛】LeetCode第358场周赛

    给你一个下标从0开始的整数数组nums。请你从nums中找出和最大的一对数,且这两个数数位上最大的数字相等。 返回最大和,如果不存在满足题意的数字对,返回 -1 。 示例 1: 输入:nums = [51,71,17,24,42] 输出:88 解释: i = 1 和 j = 2 ,nums[i] 和 nums[j] 数位上最大的数字相等,且这

    2024年02月12日
    浏览(44)
  • 【LeetCode周赛】LeetCode第370场周赛

    一场比赛中共有 n 支队伍,按从 0 到 n - 1 编号。 给你一个下标从 0 开始、大小为 n * n 的二维布尔矩阵 grid 。对于满足 0 = i, j = n - 1 且 i != j 的所有 i, j :如果 grid[i][j] == 1,那么 i 队比 j 队 强 ;否则,j 队比 i 队 强 。 在这场比赛中,如果不存在某支强于 a 队的队伍,则认为

    2024年02月05日
    浏览(52)
  • leetcode 第360场周赛

    好久没参加leetcode周赛了,比赛时间都从两小时变成了一个半小时。这次周赛由两道签到题和两道中等难度题组成,严格来说最后一道的难度也可以视为hard,但是只要想到正确的思路,编码还是比较容易的。 比赛链接:leetcode 第 360 场周赛 题目描述 给你一个长度为 n 的字符串

    2024年02月11日
    浏览(37)
  • LeetCode第343场周赛

    2023.4.30LeetCode第343场周赛 根据题意模拟 使用哈希表记录每个数出现的位置,再用m+n个集合记录每一行和每一列被涂满的格子数,若某行或某列全部被涂满则返回答案 BFS 首先将距离大于两点的曼哈顿距离的特殊路径去掉 每个点考虑经过每个特殊路径到达,分成两段,一段是当

    2024年02月02日
    浏览(41)
  • LeetCode第347场周赛

    2023.5.28LeetCode第347场周赛 从最后一位开始遍历,为0则跳过 暴力模拟 对于每个 s[i] != s[i - 1] ,要使其相等 有两种选择,翻转前 i 个,或者翻转后 n - i 个,选择代价最小的方案 动态规划 从小到大枚举所有值,每个值一定是从更小的数转移而来 定义动态规划数组f, f[i][j] 表示

    2024年02月06日
    浏览(75)
  • LeetCode第354场周赛

    给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 对 nums 中的元素 nums[i] 而言,如果 n 能够被 i 整除,即 n % i == 0 ,则认为 num[i] 是一个 特殊元素 。 返回 nums 中所有 特殊元素 的 平方和 。 直接模拟就好了 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一

    2024年02月16日
    浏览(63)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包