码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode笔记:Biweekly Contest 112


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

    0. 吐槽

    这一次的双周赛题目委实是有点水了,难怪第一名的大佬只花了8分钟就全部搞定了……

    1. 题目一

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

    • 2839. Check if Strings Can be Made Equal With Operations I

    1. 解题思路

    这一题其实不难看出:

    1. 奇数和偶数位上的字符不会交叉变化,即奇数位上的字符永远在奇数位上,偶数位的字符永远在偶数位上;
    2. 奇偶性相同的字符经过若干次变换可以变换为任意顺序;

    因此,要使得两个string可以相同,只要判断奇偶位上的字符是否一致即可,我们统计一下频次即可完成。

    2. 代码实现

    给出python代码实现如下:

    class Solution:
        def canBeEqual(self, s1: str, s2: str) -> bool:
            odd1 = Counter(s1[1::2])
            odd2 = Counter(s2[1::2])
            even1 = Counter(s1[::2])
            even2 = Counter(s2[::2])
            return all(odd2[k] == v for k, v in odd1.items()) and all(even2[k] == v for k, v in even1.items())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    2. 题目二

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

    • 2840. Check if Strings Can be Made Equal With Operations II

    1. 解题思路

    这一题虽然形式变换了一下,string长度也变得比较长,但是本质上和第一题是完全一样的,我们复用第一题的代码即可。

    2. 代码实现

    给出python代码实现如下:

    class Solution:
        def checkStrings(self, s1: str, s2: str) -> bool:
            odd1 = Counter(s1[1::2])
            odd2 = Counter(s2[1::2])
            even1 = Counter(s1[::2])
            even2 = Counter(s2[::2])
            return all(odd2[k] == v for k, v in odd1.items()) and all(even2[k] == v for k, v in even1.items())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    3. 题目三

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

    • 2841. Maximum Sum of Almost Unique Subarray

    1. 解题思路

    这一题用一个滑动窗口考察一下所有的连续长度为 k k k的subarray当中unique字符的个数是否不少于 m m m个,然后对符合的subarray求一下最大值即可。

    2. 代码实现

    给出python代码实现如下:

    class Solution:
        def maxSum(self, nums: List[int], m: int, k: int) -> int:
            res = 0
            cnt, s = {}, 0
            for i, x in enumerate(nums):
                if x not in cnt:
                    cnt[x] = 1
                else:
                    cnt[x] += 1
                s += x
                if i-k >= 0:
                    cnt[nums[i-k]] -= 1
                    s -= nums[i-k]
                    if cnt[nums[i-k]] == 0:
                        cnt.pop(nums[i-k])
                if i >= k-1 and len(cnt) >= m:
                    res = max(res, s)
            return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

    4. 题目四

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

    • 2842. Count K-Subsequences of a String With Maximum Beauty

    1. 解题思路

    这道题其实也不难,我们首先统计一下原始的string当中各个字符出现的频次,即题目中 f ( c ) f(c) f(c)函数,然后要给出一个长度为 k k k的unique array,使得beauty最大,也就是 f ( c ) f(c) f(c)的和最大,那么,其结果就必然是在所有的字符当中挑选 f ( c ) f(c) f(c)最大的 k k k个字符来组成一个子序列。

    因此,这个题目就变成了一个排列组合问题,首先在所有的 f ( c ) f(c) f(c)当中挑选最大的 k k k个值,如果有重复的,那么就是从中在进行一次挑选组合数,然后将其对应的值(可选项)连乘即可得到最终的答案。

    2. 代码实现

    给出python代码实现如下:

    class Solution:
        def countKSubsequencesWithMaxBeauty(self, s: str, k: int) -> int:
            MOD = 10**9 + 7
            
            freq = Counter(s)
            freq = sorted(freq.values(), reverse=True)
    
            if k > len(freq):
                return 0
            
            def C(n, k):
                res = 1
                for i in range(k):
                    res = res * (n-i) // (i+1)
                return res
                    
            
            tgt = Counter(freq[:k])
            cnt = Counter(freq)
            res = 1
            for k, v in tgt.items():
                res = (res * C(cnt[k], v) * pow(k, v, MOD)) % MOD
            return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

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

  • 相关阅读:
    【面试题解析】搜狐畅游:Redis IO多路复用中select、poll和epoll有何区别?
    常用的display的属性
    数据结构---二叉树
    Qt:信号与槽机制
    如何开展性能测试,你知道吗?
    session.upload_progress进行文件包含和反序列化学习
    【Java】SPI在Java中的实现与应用
    巴黎时装周儿童单元深圳站完美落幕
    RabbitMQ用户管理
    Java | 一分钟掌握定时任务 | 8 - XXL-Job分布式定时任务
  • 原文地址:https://blog.csdn.net/codename_cys/article/details/132654854
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号