Leetcode刷题笔记5
76. 最小覆盖子串
76. 最小覆盖子串 - 力扣(LeetCode)

解法一: 暴力枚举 + 哈希表
先定义left和right,可以在随机位置
枚举一个位置向后找,找到一个位置之后,发现这段区间是一个最小的区间之后,让left移动一格
然后right继续从left开始向后找
输入:s = "ADOBECODEBANC", t = "ABC"
hash1:
在t中A出现1次,B出现1次,C出现1次
hash2:
在s中,记录ABC出现几次
只要在hash2中,字符统计出现的次数大于等于hash1,那么就是一个有效的枚举
优化:
符合要求
s = "-----------------------------"
[L R]
当left向左移动一步时,会有两种情况
1:依旧符合要求
right不动
2:不符合要求
right向右移动,找符合要求的位置
两个指针是同向运动的,所以单调性,所以可以使用滑动窗口
解法二:滑动窗口 + 哈希表
s = "A D O B E C O D E B A N C", t = "ABC"
L
R
1. left = 0, right = 0
2. 进窗口 -> hash2[in]++
3. 判断,当窗口刚好合法时出窗口 -> check(hash1, hash2)
更新结果 -> 起始位置、最终的最短长度
出窗口 -> hash2(out)--
判断成立先更新结果,再出窗口然后继续判断
优化:判断条件
使用变量count标记有效字符的“种类”
1. 进窗口 -> 进之后,当hash2(in) == hash1(in), count++
只要hash2里面A的个数与hash1里面A的个数相等时统计
2. 出窗口 -> 出之前,当hash2(out) == hash1(out), count--
比如出窗口后,hash2里面A的个数从1变成了0,然后hash1里面A为1,成为了无效字符,那么count--
3. 判断条件 -> count == hash1.szie()
代码:C++
class Solution {
public:string minWindow(string s, string t) {// 数组模拟哈希表,因为全是英文字符int hash1[128] = {0}; // 统计字符串t中每个字符的频次int hash2[128] = {0}; // 统计窗口内每个字符的频次int kinds = 0; // 统计有效字符有多少种for(auto ch : t) {// if(hash[ch] == 0) kinds++;// hash[ch]++;// 同上if(hash1[ch]++ == 0) kinds++; // 加之前如果等于0,说明找到一个有效字符,所以kinds++}int minlen = INT_MAX, begin = -1; // minlen是最小覆盖子串长度,begin存的是起始位置for(int left=0, right=0, count=0; right<s.size(); right++){char in = s[right];// hash2[in]++;// if(hash2[in] == hash1[in])// {// count++;// }// 同上if(++hash2[in] == hash1[in]) count++; // 进窗口+维护count变量while(count == kinds) // 判断条件{// 只要窗口长度小于minlenif(right - left + 1 < minlen) // 更新结果{minlen = right - left + 1;begin = left;}// 出窗口char out = s[left++];// if(hash2[out] == hash1[out]) count--;// hash2[out]--;// 同上if(hash2[out]-- == hash1[out]) count--; // 说明此时有效字符的种类要减少}}if(begin == -1) return ""; // 如果等于-1说明没有找到一个子串,返回空串else return s.substr(begin, minlen); // 找到了就把它裁出来}
};
704. 二分查找
704. 二分查找 - 力扣(LeetCode)

原理:
[1, 2, 3, 4, 5, 6, 7, 8], t = 5
解法一:暴力解法 -> O(N)
从左往右依次用t跟数组的元素对比
比如选择4,那么在升序数组中,4和4左边区间的元素肯定比5小
解法二:二分查找算法“二段性”
当数组有二段性的时候就可以用二分查找算法
二段性:
当我们发现一个规律,然后根据这个规律选取某一个点后,能把这个数组分成两部分
然后根据规律可以有选择性的舍去一部分,然后根据这个规律在另一个部分里面继续查找的时候就可以用二分查找
选择中间点,时间复杂度最优
M
[ x ], t
L R
L = left, R = right, M = mid
朴素版本二分查找算法的核心:
第一种情况:x < t,删除左区间 -> left = mid + 1 -> 然后再在更新之后的[left, right]区间寻找结果
第二种情况:x > t,删除右区间 -> right = mid - 1 -> 然后再在更新之后的[left, right]区间寻找结果
第三种情况:x = t,直接返回结果
细节问题:
1. 循环结束的条件 -> left > right
2. 为什么是正确的
3. 时间复杂度
循环1次:
2次:
3次:
...
x次:1 -> ->
= n -> x = logN
代码实现:C++
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while(left <= right){// int mid = (left + right) / 2; // 有溢出风险int mid = left + (right - left)/2; // 防止溢出if(nums[mid] < target) left = mid + 1;else if(nums[mid] > target) right = mid - 1;else return mid;}return -1;}
};
二分查找的朴素版本模版:
// 朴素二分模版
// int left = 0, right = nums.size() - 1;while (left <= right){int mid = left + (right - left) / 2; if (......) left = mid + 1;else if (......) right = mid - 1;else return ......;}
JZ64 求1+2+3+...+n
求1+2+3+...+n_牛客题霸_牛客网 (nowcoder.com)

由于题目限制了常规的控制语句和条件判断,不能使用典型的循环或递归方法,我们需要找到一种绕开这些限制的方法来实现累加。
可以先定义一个类,在其构造函数中实现累加操作。
构造函数Sum():每次创建Sum类的对象时,构造函数会执行一次,将当前的i值加到sum中,并将i自增1
int i = 1; // 初始化一个全局变量 i,初始值为 1,从1开始累加
int sum = 0; class Sum {
public:Sum() {sum += i; // 在构造函数中,将当前的 i 值加到 sum 上++i; // 将 i 自增 1}
};
在主函数里面调用这个函数
class Solution {
public:int Sum_Solution(int n) {Sum a[n]; // 创建一个 Sum 类的对象数组 a,大小为 nreturn sum; // 返回全局变量 sum 的值}
};
每次创建Sum类的对象时,构造函数会自动执行累加操作。通过创建一个包含n个对象的数组,可以自动调用构造函数n次。
在C++中,创建一个类对象数组会自动调用数组中每个对象的构造函数。通过创建一个包含n个对象的数组,可以确保构造函数被调用n次,从而完成累加。
相关文章:
Leetcode刷题笔记5
76. 最小覆盖子串 76. 最小覆盖子串 - 力扣(LeetCode) 解法一: 暴力枚举 哈希表 先定义left和right,可以在随机位置 枚举一个位置向后找,找到一个位置之后,发现这段区间是一个最小的区间之后,…...
【Qt】Qt中的信号槽
一、信号和槽概述 信号槽是Qt矿建引以为豪的机制之一。 所谓信号槽,实际上就是观察者模式(发布——订阅模式)。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号。这种发出的信号是…...
VsCode个人插件
Auto Rename Tag > 同时修改标签 Rainbow Brackets > 不同层级不同括号颜色 Dracula Official > 个人比较喜欢的一款主题 Error Lens > 错误信息显示 ES7REACT/Redux/React-Native>react开发插件 ESLINT Indenticator>方便看结构 Prettier Formatter …...
Docker环境安装并使用Elasticsearch
1、拉取es docker pull elasticsearch:7.10.12、查看镜像 docker images3、启动es docker run -d --name esearch -p 9200:9200 -p 9300:9300 elasticsearch:7.10.14、如果启动ES时出现一下问题 Unable to find image docker.elastic.co/elasticsearch/elasticsearch:7.10.…...
中心渗透Ⅱ
cs与msf权限传递以及mimikatz抓取win2012明文密码 使用Cobalt Strike抓取win2012明文密码,将会话传递到Metasploit Framework上 1.cs生成木马并使目标服务器中马 建立监听生成木马 2.抓取目标主机的明文密码 通过修改注册表来让Wdigest Auth保存明文口令 shell …...
【webrtc】RtpToNtpEstimator:最小二乘法、ntp估计及c++实例
上一篇: 【webrtc】RtpToNtpEstimator:将 RTP 时间戳映射到 NTP 时间 分析了最小二乘法的实现及对rtp到ntp的映射计算的调用流程 基于最小二乘法进行估计 RtpToNtpEstimator::Estimate G:\CDN\rtcCli\m98\src\system_wrappers\source\rtp_to_ntp_estimator.cc RtpToNtpEstima…...
【DevOps】Elasticsearch在Ubuntu 20.04上的安装与配置:详细指南
目录 一、ES 简介 1、核心概念 2、工作原理 3、 优势 二、ES 在 Ubuntu 20.04 上的安装 1、安装 Java 2、下载 ES 安装包 3、创建 ES 用户 4 、解压安装包 5、 配置 ES 6、 启动 ES 7、验证安装 三、ES 常用命令 1、创建索引 2、 插入文档 3、查询文档 四、ES…...
windows内存管理
一 windows系统的内存管理涉及哪些 1.1 虚拟内存管理机制 windows操作系统使用虚拟内存技术,将磁盘文件,通过映射对象(存储在物理内存)关联,映射到虚拟内存作为文件试图。即用户操作"虚拟内存中File View Objec…...
c++ 将指针转换为 void* 后,转换为怎么判断原指针类型?
当将指针转换为void后,擦除了指针所指向对象的类型信息,因此无法通过void指针来判断原始指针的类型。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个…...
Swift 属性
属性 一、存储属性1、常量结构体实例的存储属性2、延时加载存储属性3、存储属性和实例变量 二、计算属性1、简化 Setter 声明2、简化 Getter 声明3、只读计算属性 三、属性观察器四、属性包装器1、设置被包装属性的初始值2、从属性包装器中呈现一个值 五、全局变量和局部变量六…...
基于maxkey接入jeecgboot并实现账户同步
1. 注册应用 1.1 在统一认证中心注册第三方应用 1.1.1 填写应用名和登录地址 1.1.2 填写认证地址授权方式和作用域 1.1.3 选择权限范围并提交 1.2 配置访问权限 1.2.1 指定用户组 1.1.2 选择注册的应用 1.1.3 在单点登录认证页面查看添加的应用 1.3 同步一个第三方应用的账号…...
kafka Kerberos集群环境部署验证
背景 公司需要对kafka环境进行安全验证,目前考虑到的方案有Kerberos和SSL和SASL_SSL,最终考虑到安全和功能的丰富度,我们最终选择了SASL_SSL方案。处于知识积累的角度,记录一下kafka keberos安装部署的步骤。 机器规划 目前测试环境公搭建了三台kafka主机服务,现在将详细…...
[C++]debug介绍+debug时如何查看指针指向内存处的值
一、简介 预备工具和知识:使用使用VSCode使用Debug。 本文简介:本文将简要介绍debug中Continue,Step Over,Step Into和Restart的功能。并介绍如何在debug时查看动态内存地址(指针)的值; 二、D…...
AI学习指南数学工具篇-凸优化在支持逻辑回归中的应用
AI学习指南数学工具篇-凸优化在支持逻辑回归中的应用 一、引言 在人工智能领域,逻辑回归是一种常见的分类算法,它通过学习样本数据的特征和标签之间的关系,来进行分类预测。而在逻辑回归算法中,凸优化是一种重要的数学工具&…...
Flutter 中的 AspectRatio 小部件:全面指南
Flutter 中的 AspectRatio 小部件:全面指南 Flutter 是一个流行的跨平台 UI 框架,它提供了丰富的小部件来帮助开发者构建高质量的应用程序。在 Flutter 的小部件库中,AspectRatio 是一个非常有用的小部件,它允许开发者以一种简单…...
应用程序中的会话管理和Cookie安全指南
应用程序中的会话管理和Cookie安全指南 在现代应用程序中,会话管理和Cookie安全是确保用户信息和数据安全的重要组成部分。本文将详细介绍会话管理的最佳实践以及如何通过安全的Cookie设置来保护会话ID的交换。 单点登录(SSO)及会话管理机制…...
备战秋招c++ 【持续更新】
T1 牛牛的快递 原题链接:牛牛的快递_牛客题霸_牛客网 (nowcoder.com) 题目类型:模拟 审题&确定思路: 1、超过1kg和不足1kg有两种不同收费方案 ---- 起步价问题 2、超出部分不足1kg的按1kg计算 ----- 向上取整 3、向上取整的实现思路…...
整数拆分~
way:process //上一个拆出来的数是pre //还剩下rest需要去拆 //返回拆解的方法数 #include<iostream> using namespace std;//上一个拆出来的数是pre //还剩下rest需要去拆 //返回拆解的方法数 int process(int pre, int rest) {if(rest0) return 1;//因为后…...
【Qt Creator】跨平台的C++图形用户界面应用程序开发框架---QT
🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.互联网的核心岗位以及职…...
KingbaseES数据库物理备份还原sys_rman
数据库版本:KingbaseES V008R006C008B0014 简介 sys_rman 是 KingbaseES 数据库中重要的物理备份还原工具,支持不同类型的全量备份、差异备份、增量备份,保证数据库在遇到故障时及时使用 sys_rman 来恢复到数据库先前状态。 文章目录如下 1.…...
电子工程师必读:假芯片识别与防范全指南
1. 芯片造假现象深度解析作为一名在电子行业摸爬滚打十余年的工程师,我见过太多因为假芯片导致的惨痛教训。记得2018年我们团队做一个工业控制器项目,就因为一批假冒的STM32芯片导致整批产品返工,直接损失超过50万元。这件事让我深刻意识到&a…...
数理化随机出题系统HTML源码,适配教育场景,支持自定义题库与难度分级
🛠️ 系统核心功能多学科覆盖:支持数学、物理、化学三个学科的题目随机生成难度分级配置:可自定义简单、中等、困难三个难度级别的题目占比题库自定义:支持手动添加不同学科、不同难度的题目内容一键生成试卷:点击即可…...
比话降AI和嘎嘎降AI处理80%+AI率哪个更好
比话降AI和嘎嘎降AI是目前市面上处理极高AI率最有效的两款工具,但很多人不知道该选哪个。 这篇文章做一个直接的对比:两款工具在AI率80%场景下,各有什么优势和劣势,你的情况适合哪个。 基础信息对比 项目比话降AI嘎嘎降AI官网b…...
Unity WebGL小游戏上抖音,从踩坑到上线:一份避坑指南与性能优化清单
Unity WebGL小游戏上抖音:性能优化与避坑实战手册 当你第一次将Unity WebGL小游戏发布到抖音平台时,可能会遇到各种意想不到的性能瓶颈和兼容性问题。iOS设备上的内存限制、WebGL与Native的性能差距、包体大小控制等挑战,都可能让原本流畅的游…...
Claude Code源码分析之提示词工程
每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型! 在开发大模型应用的时候,管理系统提示词(System Prompt)往往是个让人头大的工程难题。要是只用简单的字符串拼接,随着活儿越接越多&#…...
彻底搞懂支持向量机(SVM):从“找条线分开红蓝球”到“核函数大法”
一张图、一个故事、几行代码,带你拿下机器学习中最优雅的分类算法你有没有玩过这样的游戏:在一张纸上,红点和蓝点混在一起,让你画一条直线把它们分开,而且要尽可能让这条直线离两边的点都远一点?如果你画过…...
银河麒麟kylin.desktop-generic编译程序执行权限问题深度解析与实战解决方案
1. 银河麒麟权限问题的现象与本质 最近在银河麒麟kylin.desktop-generic环境下开发时,遇到了一个让人头疼的问题:明明用gcc编译生成的可执行文件已经显示有x权限,运行时却提示"权限不够"。这种看似矛盾的报错,其实是银河…...
文章标题:基于高阶温度补偿的低温漂带隙基准电压源设计
带隙基准,超低温漂,1.9,高电源抑制比,低功耗,高阶温度补偿带隙基准,cadence 低温漂基准电压源设计 ppm:1.9 PVT下,ppm<20 psrr:-90dB,0~100kHz 电流&…...
Docker 入门到进阶:容器化部署 Nginx + MySQL + WordPress 实战(附 Dockerfile、docker-compose.yml 详解)
前言在云原生时代,Docker 已成为开发与运维人员的必备技能。本文将带你从零开始,系统学习 Docker 核心概念与实战技巧,最终使用 Docker Compose 一键部署一套高可用的 WordPress 站点,其中包含 Nginx 作为反向代理、MySQL 作为数据…...
《碳硅“虫洞”解:跨认知区域的可穿越通道》(修订版)
《碳硅“虫洞”解:跨认知区域的可穿越通道》 作者:方见华 单位: 世毫九实验室 摘要 本文研究碳硅共生认知场方程在柱对称条件下的精确解,发现存在连接两个分离认知区域的“认知虫洞”。主要结果: 1. 虫洞解的存在性&am…...
