Leetcode周赛 | 2023-7-30--我真是个废物

news2024/9/23 17:22:53

2023-7-30--我真是个废物

  • 题1
    • 体会
    • 我的代码
  • 题2
    • 体会
    • 我的代码
  • 题3
    • 体会
    • 我的代码

题1

在这里插入图片描述

体会

根本没想到用双指针。原因是,没想到还要用一个字典去维护子数组中各个数字的出现频次,以及出现频次不小于1 (也就是大于0) 的数字个数。

在这里插入图片描述
这里的双重循环也很巧妙,根本想不到。

class Solution:
    def countCompleteSubarrays(self, nums: List[int]) -> int:
        # 查看目标需要有多少个不同的数字
        m = len(set(nums))

        n = len(nums)
        l, r = 0, 0
        # 分别记录出现的频次和出现频次大于 0 的数的个数
        cnt = Counter()
        different_values = 0
        ans = 0
        while l < n:
            while r < n and different_values < m:
                cnt[nums[r]] += 1
                # 频次变为 1 时,出现频次大于 0 的数的个数增加 1
                if cnt[nums[r]] == 1: different_values += 1
                r += 1
            if different_values < m: break
            # [l, r-1], ..., [l, n-1] 总共有 n - r + 1 个区间
            ans += n - r + 1
            cnt[nums[l]] -= 1
            # 频次变为 0 时,出现频次大于 0 的数的个数减少 1
            if cnt[nums[l]] == 0: different_values -= 1
            l += 1
        return ans

上面的代码中,根本没用到 Counter() , 就是当一个字典来用的。换成字典是一样的。

class Solution:
    def countCompleteSubarrays(self, nums: List[int]) -> int:
       # 查看目标需要有多少个不同的数字
        m = len(set(nums))

        n = len(nums)
        l, r = 0, 0
        # 分别记录出现的频次和出现频次大于 0 的数的个数
        cnt = {}
        different_values = 0
        ans = 0
        while l < n:
            while r < n and different_values < m:
                cnt[nums[r]] = cnt.get(nums[r],0)+1
                # 频次变为 1 时,出现频次大于 0 的数的个数增加 1
                if cnt[nums[r]] == 1: different_values += 1
                r += 1
            if different_values < m: break
            # [l, r-1], ..., [l, n-1] 总共有 n - r + 1 个区间
            ans += n - r + 1
            cnt[nums[l]] -= 1
            # 频次变为 0 时,出现频次大于 0 的数的个数减少 1
            if cnt[nums[l]] == 0: different_values -= 1
            l += 1
        return ans

我的代码

题2

在这里插入图片描述

体会

在这里插入图片描述

class Solution:
    def minimumString(self, a: str, b: str, c: str) -> str:
      
        length, res = inf, ''
        if a in b or a in c: a = ''
        if b in a or b in c: b = ''
        if c in a or c in b: c = ''
        
        for x, y, z in permutations((a, b, c)):
            
            tmp = ''
            for i in range(min(len(x), len(y)), 0, -1):
                if x[-i:] == y[:i]: tmp = x + y[i:]; break
            else: tmp = x + y
            
            for i in range(min(len(tmp), len(z)), 0, -1):
                if tmp[-i:] == z[:i]: tmp = tmp + z[i:]; break
            else: tmp = tmp + z
            
            if len(tmp) < length or (len(tmp) == length and tmp < res):
                length = len(tmp)
                res = tmp
            
        return res

太恐怖了,这个编程技巧, if else 还能这样用的 ?

本题只有三个字符串,一共可能的组合也没几种,那就全部遍历!一定要区分,是处理固定个数目标的题,还是处理N个目标的题,固定个数的可以全部遍历。

我的代码

题3

在这里插入图片描述

体会

数位DP我不配。
在这里插入图片描述

mod = 10 ** 9 + 7
class Solution:
    def countSteppingNumbers(self, low: str, high: str) -> int:
        low = str(int(low) - 1)
        @cache
        def getRes(idx, start, bind, lastVal):
            if idx == len(x): return 1 if start else 0
            
            # 如果数字还没开始,那么可以到下一个位再开始
            res = 0 if start else getRes(idx+1, False, False, 0)

            # 可能转移成的数字:如果数字还未开始
            for i in ([lastVal-1, lastVal+1] if start else range(1, 10)):
                # 判断数字是否合法:有无本身超出数字集 / 大于了给定的 x 的情况
                if i < 0 or i > 9: continue
                if bind and i > x[idx]: break
                # 看上界是否还有限制作用
                note = bind and i == x[idx]
                res += getRes(idx+1, True, note, i)
            
            return res % mod
        
        x = [int(x) for x in high]
        ans = getRes(0, False, True, 0)
        getRes.cache_clear()
        # 注意这里要清空下 cache,否则同个状态对于两个 x 判断结果不同会造成答案错误
        
        x = [int(x) for x in low]
        ans -= getRes(0, False, True, 0)
        getRes.cache_clear()

        return ans % mod # 减了之后可能变成负数,记得取模


我的代码

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

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

相关文章

牛客 排座椅(贪心)

上课的时候总有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的D对同学上课时会交头接耳。 同学们在教室中坐成了 M 行 N 列&…

【每日一题Day281】LC142链表 Ⅱ| 快慢指针 哈希表

环形链表 Ⅱ【LC142】 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使…

用JavaScript和HTML实现聊天页面和功能(超详细)

文章目录 &#x1f680;一、介绍&#x1f680;二、开始编码&#x1f50e;2.1 创建一个HTML文件&#x1f50e;2.2 编写样式&#x1f50e;2.3 完善聊天页面&#x1f50e;2.4 编写按钮逻辑&#x1f50e;2.5 测试聊天效果&#x1f50e;2.6 优化对话显示&#x1f50e;2.7 设置一个自…

Cesium地形裁剪

基于纹理映射实现的裁剪&#xff0c;反裁剪也可以。比判断点是否在多边形内裁剪性能要好的多&#xff0c;缺点是在边缘锯齿感会比较明显。 3DTileset 的裁剪也和这样一样用纹理映射实现了&#xff0c;效果一样

单链表的多语言表达:C++、Java、Python、Go、Rust

单链表 是一种链式数据结构&#xff0c;由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据&#xff0c;只用于表示链表的开始位置。 单链表的主要操作包括&#xff1a; 添加元素&#xff1a;在链表的头部添加新…

【指针二:穿越编程边界的超能力】

本章重点 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析 五、函数指针 首先看一段代码&#xff1a; 输出的是两个地址相同&#xff0c;这两个相同的地址都是 test 函数的地址。 那我们的函数的地址要想保存起来&#xff0c;怎…

LeetCode63. 不同路径 II

63. 不同路径 II 文章目录 [63. 不同路径 II](https://leetcode.cn/problems/unique-paths-ii/)一、题目二、题解方法一&#xff1a;二维数组动态规划方法二&#xff1a;一维数组动态规划 一、题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “…

【Linux】线程互斥 -- 互斥锁 | 死锁 | 线程安全

引入互斥初识锁互斥量mutex锁原理解析 可重入VS线程安全STL中的容器是否是线程安全的? 死锁 引入 我们写一个多线程同时访问一个全局变量的情况(抢票系统)&#xff0c;看看会出什么bug&#xff1a; // 共享资源&#xff0c; 火车票 int tickets 10000; //新线程执行方法 vo…

rtthread的idle线程不应该长时间堵塞

RT-Thread是一个实时嵌入式操作系统&#xff0c;它的空闲线程&#xff08;Idle Thread&#xff09;是在系统中没有其他任务需要执行时运行的线程。空闲线程通常用于执行一些低优先级的任务或者进行系统的休眠等操作。 RT-Thread的空闲线程不能在线程中堵塞的原因是为了确保系统…

将多张图片拼接成图像矩阵图

用Python实现将12张图片排列成n*m的图像矩阵图 目录 引言环境准备代码实现效果演示总结 引言 在图像处理和图像展示的应用中&#xff0c;将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。 环境准备 为了实…

【动态规划刷题 2】不同路径不同路径 II

不同路径 62 . 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的…

iPhone 安装 iOS 17公测版(Public Beta)

文章目录 步骤1. 备份iPhone资料步骤2. 申请iOS 17 公测Beta 资格步骤3. 下载iOS 16 Beta 公测描述档步骤4. 选择iOS 17 Beta 公测描述档更新项目步骤5. 升级iOS 17 Public Beta 公开测试版 苹果已经开始向大众释出首个iOS 17 公开测试版/ 公测版( iOS 17 Public Beta)&#xf…

【C++】类和对象 - 上

目录 1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算类的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则 8. this指针8.1 引出8.2 this指针的特性 总结 1. 面…

ES查看集群信息(健康状态、分片、索引等)

1、查看集群状态使用频率最高的方法 http://192.168.1.101:9200/ 注意&#xff1a;不同环境的ip不同 一般我们通过这个方式来验证ES服务器是否启动成功。 2、_cat/health 查看集群健康状态 [rootCENTOS01 ~]# curl http://192.168.1.101:9200/_cat/health?v epoch tim…

Spring Data【Spring Data Redis、Spring Data ElasticSearch】(二)-全面详解(学习总结---从入门到深化)

目录 四、 Spring Data Redis 五、 Spring Data ElasticSearch 四、 Spring Data Redis Redis 是一个基于内存的数据结构存储系统&#xff0c;它可以用作数据库或者缓存。它支持多种 类型的数据结构&#xff0c;这些数据结构类型分别为 String&#xff08;字符串&#xff09…

0基础系列C++教程 从0开始 第四课

目录 来学习新的内容吧 1 输入 第四课课后习题1&#xff1a; 2 变量 怎么定义变量&#xff1f; 定义变量 第四课课后习题2&#xff1a; 来学习新的内容吧 1 输入 C中既然有了输出 那必然有输入 这时 我们就要用到 cin 函数啦 cin 用法与cout 相似 但却有一个差异 co…

Vue(十八):echarts地图省市区联动

效果 数据来源 https://datav.aliyun.com/portal/school/atlas/area_selector 接口请求地址 https://geo.datav.aliyun.com/areas_v3/bound/geojson?code100000_full 源码 样式 .map {width: 1000px;height: 700px; }布局 <template><div class"map">…

linux -网络编程-多线程并发服务器

目录 1.三次握手和四次挥手 2 滑动窗口 3 函数封装思想 4 高并发服务器 学习目标&#xff1a; 掌握三次握手建立连接过程掌握四次握手关闭连接的过程掌握滑动窗口的概念掌握错误处理函数封装实现多进程并发服务器实现多线程并发服务器 1.三次握手和四次挥手 思考: 为什么…

linux centos7 安装java17

删除旧版本的java或者说是自带的&#xff0c;免得干扰 查找java rpm -qa|grep java java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 javapackages-tools-3.4.1-11.el7.noarch tzdata-java-2020a-1.el7.noarch python-javapackages-3.4.1-11.el7.noarch java-1.8.0-open…

力扣热门100题之矩阵置0【中等】

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 示例 2&#xff…