[LeetCode周赛复盘] 第 91 场双周赛补20221015

news2024/11/19 12:40:39

[LeetCode周赛复盘] 第 91 场双周赛补20221015

    • 一、本周周赛总结
    • 二、 [Easy] 2465. 不同的平均值数目
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、[Medium] 2466. 统计构造好字符串的方案数
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、[Medium] 2467. 树上最大得分和路径
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 五、[Hard] 2468. 根据限制分割消息
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • 只会T1\T3。
  • T1对向双指针。
  • T2 dp
  • T3 dfs
  • T4 贪心构造模拟

二、 [Easy] 2465. 不同的平均值数目

链接: 2465. 不同的平均值数目

1. 题目描述

在这里插入图片描述

2. 思路分析

按题意模拟即可。

  • 排序后使用对向双指针,避免下标算不明白。
  • 注意由于平均值可能有浮点型为了避免精度损失直接记录和即可,相当于都乘2。

3. 代码实现

class Solution:
    def distinctAverages(self, nums: List[int]) -> int:
        nums.sort()
        n = len(nums)
        l, r = 0,n-1
        ans = set()
        while l < r:
            ans.add(nums[l]+nums[r])            
            l+=1
            r-=1
        return len(ans)

三、[Medium] 2466. 统计构造好字符串的方案数

链接: 2466. 统计构造好字符串的方案数

1. 题目描述

在这里插入图片描述

2. 思路分析

爬楼梯变装版。

  • 真没想出来,后来说zero和one其实就是步数。
  • 需要好好思索。

3. 代码实现

MOD = 10**9+7
class Solution:
    def countGoodStrings(self, low: int, high: int, zero: int, one: int) -> int:
        f = [0]*(high+1)
        f[0] = 1
        # f[zero] = 1
        # f[one] = 1
        for i in range(1,high+1):
            if i >= zero:
                f[i] += f[i-zero]
            if i >= one:
                f[i] += f[i-one]
            f[i] %= MOD
        return sum(f[low:]) % MOD

四、[Medium] 2467. 树上最大得分和路径

链接: 2467. 树上最大得分和路径

1. 题目描述

在这里插入图片描述
在这里插入图片描述

2. 思路分析

  • 题目看似很长,其实题意比较简单,bob的路径和每个时刻的位置是固定的。因此可以先把bob的每个时刻位置求出来。
  • 然后对alice的可能位置dfs,注意传入时间,来判断某个时刻bob是否到达了/已到达过这个位置,决定这个位置的得分是否能拿到。
  • 因此两个dfs即可。
  • 注意第二个dfs可以先根遍历也可以后根遍历,我个人觉得后根遍历好写;如果先根的话需要从根记录答案,向下传递。

3. 代码实现

class Solution:
    def mostProfitablePath(self, edges: List[List[int]], bob: int, amount: List[int]) -> int:
        n = len(edges)+1
        g = [[] for _ in range(n)]
        for u,v in edges:
            g[u].append(v)
            g[v].append(u)
        
        fas = {}
        def dfs(u,fa):
            fas[u] = fa
            for v in g[u]:
                if v != fa:
                    dfs(v,u)
        dfs(0,-1)
        
        b_path = {bob:0}
        t = 0
        b = 0
        while bob != -1:
            b_path[bob]=t
            t += 1
            b += amount[bob]
            # amount[bob] = 0
            bob = fas[bob]
        
        def f(u,fa,t):
            if fa!= -1 and len(g[u]) == 1:
                ans = 0
            else:                
                ans = -inf
            for v in g[u]:
                if v != fa:
                    ans = max(ans, f(v,u,t+1))
            print(u,ans,amount[u])
            if u not in b_path or t < b_path[u]:
                return ans + amount[u]
            if t == b_path[u]:
                return ans + amount[u]//2            
            return ans 
        return f(0,-1,0) 
        
        
            

五、[Hard] 2468. 根据限制分割消息

链接: 2468. 根据限制分割消息

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 这题完全不会做,算构造模拟题吧。也可说是贪心枚举。
  • 注意没有单调性,但分段是有单调性的,可能可以分段二分(在10,100,1000,10000的位置分段)。
  • 显然message具体是啥没有用,只有长度n有用。
  • 从小到大枚举分段数,计算在这个分段数下,能容纳多少个字符,容量cap需要>=n才表示可以构造答案了。
  • 由于枚举是O(n),难点在于每次计算容量时是否能以O(1)或O(lg)的代价计算出cap,这里就是用了一些办法从上一个状态转移。
  • 因此边转移边算就能算出来了。具体怎么算的可以看代码注释。

3. 代码实现

class Solution:
    def splitMessage(self, message: str, limit: int) -> List[str]:
        """贪心模拟,枚举分段数是i时,总共能容纳的字符长度,如果超过n,则可以产生答案;否则分段应该增加;如果发现结尾大于limit了,则无法构造
        要点在于如何线性的计算容量cap,即均摊O(1)的计算cap,这里是i增加时,从前一个i状态转移过来;而不是每次i增加都要从1枚举分段到i。
        时间复杂度,枚举i是O(n/(limit-tail_len)),构造答案是O(nlogn)
        """
        i = cap = 0
        n = len(message)
        while True:
            i += 1  # 枚举分段数,且枚举时认为这是最后一段,这样可以从前边状态转移(即计算了当分i段时,总共的i段加起来能容纳多少字母:cap)
            if i<10:
                tail_len = 5  # i<10时结尾形如<9/9>,长度是5
            elif i<100:  
                if i == 10:  # 如果分母多位了,前边的分母也要多位,从1位变2位,一共有9个
                    cap -= 9
                tail_len = 7  # i < 100时结尾形如<99/99>,长度是7
            elif i<1000:
                if i == 100:  # 如果分母多位了,前边的分母也要多位,从2位变3位,一共有99个
                    cap -= 99
                tail_len = 9
            else:
                if i == 100:
                    cap -= 999
                tail_len = 11
            if tail_len >= limit:
                return []
            cap += limit - tail_len
            if cap < n:
                continue
            ans = []
            k = 0
            for j in range(1,i):
                tail = f'<{j}/{i}>'
                m = limit - len(tail)
                ans.append(message[k:k+m]+tail)
                k += m
            
            ans.append(message[k:]+f'<{i}/{i}>')
            return ans

六、参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.2、物理层下面的传输媒体

2.2、物理层下面的传输媒体 注意&#xff1a; 传输媒体不属于网络体系结构的任何一层。若非要将它添加到体系结构中&#xff0c;那只能放在物理层之下 传输媒体大致分为 2 类 2.2.1、导引型传输媒体 导引型传输媒体 电磁波被导引沿着固体媒体传播常见的导引型传输媒体有同…

电子元器件解析01——电阻

摘要电阻是最基本的电子元器件之一&#xff0c;了解电阻的各方面特性对正确选用合适的电阻很有帮助。本文总结了关于电阻的各个性能参数&#xff0c;包括电阻的标称值、精度、温度系数、耐压、封装与功率&#xff1b;总结了电阻的分类&#xff0c;有多种分类依据&#xff0c;包…

基于jsp+mysql+ssm的校园OTO超市系统-计算机毕业设计

项目介绍 本网站主要是针对高校学生以超市购物为重点开发的网站。系统从用户上分为三种&#xff1a;卖家、买家和游客。系统从模块分为买家模块和卖家模块&#xff0c;买家模块包括用户注册登录、商品浏览、商品详情、商品加入购物车、购物车中商品删除、购物车商品数量变更、…

腾讯代码安全指南开源,涉及 C/C++、Go 等六门编程语言

腾讯代码安全指南旨在梳理 API 层面的风险点并提供详实可操作的编码指引&#xff0c;是我们开展 DevSecOps 安全左移实践探索过程中&#xff0c;梳理沉淀面向开发人员的代码安全参考材料。 本次开源涉及 C/C、JavaScript、Node、Go、Java、Python 六门编程语言的安全指南。 一…

详解风控模型中的逻辑回归评分卡与模型评估内容

今天我们来输出一篇风控长文&#xff0c;关于大家熟悉关注的逻辑评分卡的开发的内容&#xff0c;文章篇幅较长&#xff0c;大纲目录如下&#xff1a; 建模前准备 1.1特征预处理与转化 1.2特征衍生与提取 1.3特征选择与降维 分箱 2.1分箱概述 2.2分箱方法 Woe计算 3.1 WOE 3.2…

【用户画像】功能实现值写入ClickHouse人群包、预估和更新分群人数,NoSQL数据库介绍

文章目录一 写入ClickHouse人群包1 组合查询Bitmap表SQL代码实现&#xff08;1&#xff09;SQL语句分析&#xff08;2&#xff09;实现思路&#xff08;3&#xff09;实现过程controller层service层Taginfo实现类mapper层2 人群包代码实现&#xff08;1&#xff09;配置文件&am…

一个注解干翻所有Controller

1. 概览 日常开发中&#xff0c;最繁琐的便是编写 Controller。很多公司都制定了规范&#xff1a;Controller 不能存在任何的业务逻辑&#xff0c;主要完成参数解析和结果转换。不过查看项目源码&#xff0c;你会发现 Controller 中存在了大量不该存在的逻辑&#xff0c;对此&…

【MFC】打砖块小游戏(下)(7)

任务点&#xff1a; 1、键盘左右键消息处理&#xff1b; 2、碰撞检测&#xff08;与砖块、挡板、上、左、右&#xff09;&#xff1b; 3、控制转向&#xff1b; 程序shix 解决思路&#xff1a; 1、左右键消息处理&#xff1a; 响应 WM_KEYDOWN 消息&#xff0c;移动挡板…

【Spring】——1、使用@Configuration和@Bean给容器中注册组件

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

ArrayList详解

ArrayList是什么? ArrayList就是动态数组&#xff0c;是List接口的可调整大小的数组实现&#xff1b;除了实现List接口之外&#xff0c;该类还提供了一些方法来操纵内部使用的存储列表的数组大小。它的主要底层实现是数组Object[] elementData。 为什么要设计ArrayList&…

【C++】mapset利用红黑树进行简单封装

前言 大家好~~~~呀&#xff01;很荣幸你能点击这篇文章。本篇也是我的一份学习笔记&#xff0c;让我们一起共同成长吧~ing...... C红黑树的简单插入实现博客~ 【C】红黑树的插入实现_柒海啦的博客-CSDN博客 二叉搜索树的基本结构和实现博客~ 【C】二叉搜索树_柒海啦的博客-CSDN…

java 实现一个最小栈

文章目录最小栈1.实现思路2.实现过程演示3.代码实现思路3.1 压入思路3.2 弹出思路3.3 如何返回栈顶元素的下标3.4 如何返回栈的最小值4.整体代码实现最小栈 1.实现思路 实现一个stack栈 和 minStack栈。先将数据一个一个压入到 stack 中。找到 stack 中的最小值。minStack中始…

简单介绍动态链接过程

文章目录gotgot[0] link_map结构体地址got[1] _dl_runtime_resolvegot[2]之后pltplt[0] 调用libc解析函数plt后面的plt.sec随便拿ida打开一个程序可以看到这是got的内容gdb一下查看内容&#xff0c;可以看到地址是从0开始的大家也知道 got是个独立的section&#xff0c;所以最开…

MySQL数据库(Java的数据库编程:JDBC)

作者&#xff1a;渴望力量的土狗 博客主页&#xff1a;渴望力量的土狗的博客主页 专栏&#xff1a;MySQL数据库 目录 什么是数据库编程&#xff1a; 什么是JDBC? JDBC工作原理&#xff1a; JDBC的使用及相关操作&#xff1a; JDBC开发案例&#xff1a; JDBC常用接口…

关于电影的HTML网页设计-威海影视网站首页-电影主题HTM5网页设计作业成品

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

5分钟教你如何设计一个安全web架构

今天就给大家聊聊web安全&#xff0c;web安全占比还是比较大的&#xff0c;基础的从一些html标签&#xff0c;到js 然后到接口&#xff0c;数据库&#xff0c;以及流量攻击&#xff0c;模拟请求。当然这也谈到了一个概念&#xff0c;全新的架构设计模式&#xff0c;前后端分离&…

一文讲解如何学习 Linux 内核网络协议栈

协议栈的细节 下面将介绍一些内核网络协议栈中常常涉及到的概念。 sk_buff 内核显然需要一个数据结构来表示报文&#xff0c;这个结构就是 sk_buff ( socket buffer 的简称)&#xff0c;它等同于在<TCP/IP详解 卷2>中描述的 BSD 内核中的 mbuf。 sk_buff 结构自身并不…

【毕业设计】深度学习人脸性别年龄识别系统 - python

文章目录0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程4 具体实现4.1 预训练数据格式4.2 部分实现代码5 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff0…

【案例分享】华为防火墙出接口方式的单服务器智能DNS配置

介绍出接口方式的单服务器智能DNS的配置举例。 组网需求 如图1所示&#xff0c;企业部署了一台ISP1服务器对外提供Web服务&#xff0c;域名为www.example.com。ISP1服务器的私网IP地址为10.1.1.10&#xff0c;服务器映射后的公网IP地址为1.1.1.10。企业的DNS服务器上存在域名w…

为什么你的用户转化率不高?-- 新媒体运营转化效果渠道归因分析

新媒体运营人最关注的就是流量和用户转化问题。公司发布了新APP、上线了新网站项目&#xff0c;进行用户定位、策划、数据分析和内容营销&#xff0c;花重钱做产品推广&#xff0c;但最后用户转化率却不高&#xff0c;大批用户流失了......这种现象是运营人最不愿意看到的&…