力扣hot100题解(python版10-12题)
哎- -最近本来就没时间写算法 这算法怎么还这么难。。。
10、和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
提示:
-
1 <= nums.length <= 2 * 104 -
-1000 <= nums[i] <= 1000 -
-107 <= k <= 107
思路解答:
- 前缀和:计算数组的前缀和,并使用一个哈希表来记录之前出现过的前缀和及其出现次数。
- 遍历数组:遍历数组,对于每个元素,计算当前的前缀和,并查找之前是否出现过前缀和为 prefix_sum - k 的情况,如果有,则累加对应的子数组个数。
- 更新哈希表:在遍历过程中,更新哈希表,记录当前前缀和的出现次数。
def subarraySum(self, nums: list[int], k: int) -> int:count = 0prefix_sum = 0# 初始化前缀和为0的个数为1prefix_sum_count = {0: 1}for num in nums:prefix_sum += num# 更新count,加上之前出现的前缀和为prefix_sum - k的个数count += prefix_sum_count.get(prefix_sum - k, 0)# 更新当前前缀和的个数prefix_sum_count[prefix_sum] = prefix_sum_count.get(prefix_sum, 0) + 1return count
11、滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口最大值。
示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值
--------------- -----
[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3] 6 7 51 3 -1 -3 [5 3 6] 7 61 3 -1 -3 5 [3 6 7] 7
示例 2:
输入:nums = [1], k = 1
输出:[1]
提示:
-
1 <= nums.length <= 105 -
-104 <= nums[i] <= 104 -
1 <= k <= nums.length
思路解答:
-
使用双端队列:维护一个双端队列,队列中存储的是数组元素的索引,且队列中的索引对应的元素值是递减的。
-
滑动窗口处理:在遍历数组的过程中,对于每个元素,首先判断队列中的第一个索引是否在当前滑动窗口内,如果不在,则将其移除。然后将当前元素与队列尾部的元素比较,如果比队尾元素大,则将队尾元素移除,直到队列为空或者当前元素小于等于队尾元素。然后将当前元素的索引加入队列。
-
获取最大值:每次滑动窗口移动时,队列的第一个元素对应的就是当前滑动窗口的最大值。
def maxSlidingWindow(self, nums: list[int], k: int) -> list[int]:if not nums:return []result = []#创建双端队列window = collections.deque()for i, num in enumerate(nums):# 移除不在窗口内的元素if window and window[0] < i - k + 1:window.popleft()# 移除比当前元素小的元素while window and nums[window[-1]] < num:window.pop()window.append(i)# 当窗口大小达到k时,记录当前窗口的最大值if i >= k - 1:result.append(nums[window[0]])return result
12、最小覆盖子串
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
注意:
- 对于
t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。 - 如果
s中存在这样的子串,我们保证它是唯一的答案。
示例 1:
输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。
示例 2:
输入:s = "a", t = "a"
输出:"a"
解释:整个字符串 s 是最小覆盖子串。
示例 3:
输入: s = "a", t = "aa"
输出: ""
解释: t 中两个字符 'a' 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。
提示:
m == s.lengthn == t.length1 <= m, n <= 105s和t由英文字母组成
思路解答:
-
滑动窗口法:使用滑动窗口来解决这个问题。我们维护两个指针,一个指向窗口的起始位置,一个指向窗口的结束位置。移动右指针扩大窗口,直到窗口包含了所有 t 中的字符。
-
满足条件时收缩窗口:当窗口包含了所有 t 中的字符后,我们尝试缩小窗口,移动左指针,并在移动过程中更新最小子串的长度和起始位置。
-
维护字符频次:使用字典来维护 t 中字符的频次,以及窗口中字符的频次,确保窗口中包含了 t 中所有字符。
def minWindow(self, s: str, t: str) -> str:if not s or not t:return ""t_freq = collections.Counter(t)required_chars = len(t_freq)left = 0right = 0formed = 0window_freq = {}ans = float('inf'), None, Nonewhile right < len(s):char = s[right]window_freq[char] = window_freq.get(char, 0) + 1if char in t_freq and window_freq[char] == t_freq[char]:formed += 1while formed == required_chars and left <= right:if right - left + 1 < ans[0]:ans = (right - left + 1, left, right)char = s[left]window_freq[char] -= 1if char in t_freq and window_freq[char] < t_freq[char]:formed -= 1left += 1right += 1return "" if ans[0] == float('inf') else s[ans[1]:ans[2] + 1]相关文章:
力扣hot100题解(python版10-12题)
哎- -最近本来就没时间写算法 这算法怎么还这么难。。。 10、和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1]…...
【算法】复杂度分析
第一章、如何分析代码的执行效率和资源消耗 我们知道,数据结构和算法解决的是“快”和“省”的问题,也就是如何让代码运行得更快,一级如何让代码更节省计算机的存储空间。因此,执行效率是评价算法好坏的一个非常重要的指标。那么&…...
车载电子测试学习内容
搜集了一些车载测试的学习内容,大家可以参考。...
STM32F103x 的时钟源
AHB (Advanced High-performance Bus) 高速总线,用来接高速外设的。 APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的,包含APB1 和 APB2。 APB1:上面连接的是低速外设,包括电源接口、备份接口、 CAN 、 US…...
【电路笔记】-RC放电电路
RC放电电路 文章目录 RC放电电路1、概述2、RC放电电路3、RC放电电路示例当电压源从完全充电的 RC 电路中移除时,电容器 C 将通过电阻 R 放电。 1、概述 RC 放电电路利用电阻器-电容器组合的固有 RC 时间常数以指数衰减率对电容器进行放电。 在之前的 RC 充电电路教程中,我们…...
【C++STL】STL容器详解
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c系列专栏:C/C零基础到精通 🔥 给大…...
缓存篇—缓存雪崩
什么是缓存雪崩 通常我们为了保证缓存中的数据与数据库中的数据一致性,会给 Redis 里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成缓存,因此就会访问数据库,并…...
力扣日记2.22-【回溯算法篇】47. 全排列 II
力扣日记:【回溯算法篇】47. 全排列 II 日期:2023.2.22 参考:代码随想录、力扣 47. 全排列 II 题目描述 难度:中等 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输…...
如何理解三大微分中值定理
文章看原文,自己写的只是备份 高等数学强化2:一元函数微分学 中值定理 极值点 拐点_一元函数中值定理-CSDN博客 高等数学强化3:一元函数积分学 P积分-CSDN博客 高等数学强化3:定积分几何应用-CSDN博客...
Linux--自定义shell
shell shell就是操作系统提供给用户与操作系统进行交互的命令行界面。它可以理解为一个用户与操作系统之间的接口,用户可以通过输入命令来执行各种操作,如文件管理、进程控制、软件安装等。Shell还可以通过脚本编程实现自动化任务。 常见的Unix系统中使…...
AIGC 实战:Ollama 和 Hugging Face 是什么关系?
Ollama和 Hugging Face 之间存在着双重关系: 1. Ollama是 Hugging Face 开发并托管的工具: Ollama是一个由 Hugging Face 自行开发的开源项目。它主要用于在本地运行大型语言模型 (LLM),特别是存储在 GPT 生成的统一格式 (GPT-Generated Un…...
Gitee教程2(完整流程)
1.配置git git config --global user.name "用户名" git config --global user.email "密码" 如何获取? gitee右上角加号点击新建仓库,仓库名随便起一个就行 找到这条命令,把这两句一个一个复制到vscode终端就行 2.创建g…...
Go 1.22 中的 for 循环新特性详解
目录 每次迭代都创建新变量 支持整数类型循环 小结 在 Go 语言中,for 循环是实现迭代的主要方式。Go 中的 for 循环非常灵活,有多种使用方式,包括传统的三部分 for 循环、类似于其他语言中的 while 循环以及迭代集合的 range 循环。 在 1…...
igolang学习2,golang开发配置国内镜像
go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct...
R语言空间分析、模拟预测与可视化
随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也达到130多个。在本…...
体育赛事直播系统软件开发
体育赛事直播系统的软件开发是一个复杂的项目,需要多个方面的准备和工作。以下是开发这样一个系统可能涉及的主要步骤和考虑因素: 需求分析和规划:首先需要明确系统的功能需求,包括直播视频的流媒体处理、用户管理、直播赛事安排…...
使用 kind 集群安装运行极狐GitLab Runner【上】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 关于 kind kind 是一个用来运行本地 Kubernetes 机群的工具&a…...
wine 源码 vk3d wine-gecko wine-mono 各版本 国内下载地址 中国科技技术大学源
下载地址 Index of /wine/...
【ArcGIS微课1000例】0104:二位面状数据转三维多面体(建筑物按高度拉伸)
文章目录 一、加载数据二、添加高度字段三、三维拉伸显示四、生成三维体数据五、注意事项一、加载数据 打开ArcScene,加载配套实验数据(0104.rar中的二维建筑物矢量数据,订阅专栏,获取专栏所有文章阅读权限及配套数据),如下图所示: 二、添加高度字段 本实验将二维数据…...
jquery简介与解析
jQuery是一款流行的JavaScript库,旨在简化客户端脚本编写。它针对DOM操作、事件处理、动画效果和AJAX交互提供了简洁高效的解决方案,使得开发者能够更加便捷地创建交互式网页。 // jQuery小插件:给带有highlight类的元素添加鼠标悬停效果 (fu…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
