算法题① —— 数组专栏
1. 滑动窗口
1.1 长度最小的子数组
- 力扣:https://leetcode.cn/problems/minimum-size-subarray-sum/description/
int minSubArrayLen(int s, vector<int>& nums) {int result = INT32_MAX; int sum = 0; // 子序列的数值之和int subLength = 0; // 子序列的长度int i = 0;for (int j = 0; j < nums.size(); j++) { sum += nums[j];while (sum >= s) {subLength = j - i + 1;result = result < subLength ? result : subLength;sum -= nums[i++]; }}return result == INT32_MAX ? 0 : result;
}
2. 哈希
2.1 求两数组的交集
- 力扣:https://leetcode.cn/problems/intersection-of-two-arrays/description/
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result_set; unordered_set<int> nums_set(nums1.begin(), nums1.end());for (int num : nums2) {if (nums_set.find(num) != nums_set.end()) {result_set.insert(num);}}return vector<int>(result_set.begin(), result_set.end());
}
2.2 两数之和
- 力扣:https://leetcode.cn/problems/two-sum/description/
vector<int> twoSum(vector<int>& nums, int target) {unordered_map <int,int> map;for(int i = 0; i < nums.size(); i++) {auto iter = map.find(target - nums[i]); if(iter != map.end()) {return {iter->second, i};}map.insert(pair<int, int>(nums[i], i)); }return {};
}
3. 双指针
3.1 三数之和
- 力扣:https://leetcode.cn/problems/3sum/description/
vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> result;sort(nums.begin(), nums.end());for (int i = 0; i < nums.size(); i++) if (nums[i] > 0) return result;if (i > 0 && nums[i] == nums[i - 1]) continue;int left = i + 1;int right = nums.size() - 1;while (right > left) {if (nums[i] + nums[left] + nums[right] > 0) right--;else if (nums[i] + nums[left] + nums[right] < 0) left++;else {result.push_back(vector<int>{nums[i], nums[left], nums[right]});while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;right--;left++;}}}return result;
}
4. 回溯
4.1 求子集(不包含重复元素)
- 力扣:https://leetcode.cn/problems/subsets/description/
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex) {result.push_back(path); // 如果结果要包括自己就把push_back放在终止条件上面if (startIndex >= nums.size()) return;for (int i = startIndex; i < nums.size(); i++) {path.push_back(nums[i]);backtracking(nums, i + 1);path.pop_back();}
}
vector<vector<int>> subsets(vector<int>& nums) {backtracking(nums, 0);return result;
}
4.2 求子集(包含重复元素)
- 力扣:https://leetcode.cn/problems/subsets-ii/description/
- 和4.1的区别在于解集中可能会包含重复子集,需要去重(回溯+去重)
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex, vector<bool>& used) {result.push_back(path);for (int i = startIndex; i < nums.size(); i++) {// 对同一树层使用过的元素进行跳过if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) continue;path.push_back(nums[i]);used[i] = true;backtracking(nums, i + 1, used);used[i] = false;path.pop_back();}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {vector<bool> used(nums.size(), false);sort(nums.begin(), nums.end()); // 去重需要排序backtracking(nums, 0, used);return result;
}
used[i - 1] == true
,说明同一树枝使用过,可以重复选used[i - 1] == false
,说明同一树层使用过,不可重复选
4.3 递增子序列
- 力扣:https://leetcode.cn/problems/non-decreasing-subsequences/description/
- 特点:同一父节点下同一树层使用过的元素不能重复使用
- 和4.2的区别是:不能排序,只能在原数组基础上搜索
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex) {if (path.size() > 1) {result.push_back(path); // 只要path中数组个数大于一个就返回一个结果}unordered_set<int> uset; // 使用set对本层元素进行去重for (int i = startIndex; i < nums.size(); i++) {if ((!path.empty() && nums[i] < path.back()) || uset.find(nums[i]) != uset.end()) continue;uset.insert(nums[i]); // 记录这个元素在本层用过了,本层后面不能再用了path.push_back(nums[i]);backtracking(nums, i + 1);path.pop_back();}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {backtracking(nums, 0);return result;
}
4.4 全排列(无重复数)
- 力扣:https://leetcode.cn/problems/permutations/description/
vector<vector<int>> result;
vector<int> path;
void backtracking (vector<int>& nums, vector<bool>& used) {if (path.size() == nums.size()) {result.push_back(path);return;}for (int i = 0; i < nums.size(); i++) {if (used[i] == true) continue; // path里已经收录的元素,直接跳过used[i] = true;path.push_back(nums[i]);backtracking(nums, used);path.pop_back();used[i] = false;}
}
vector<vector<int>> permute(vector<int>& nums) {vector<bool> used(nums.size(), false);backtracking(nums, used);return result;
}
4.5 全排列(有重复数)
- 力扣:https://leetcode.cn/problems/permutations-ii/description/
vector<vector<int>> result;
vector<int> path;
void backtracking (vector<int>& nums, vector<bool>& used) {if (path.size() == nums.size()) {result.push_back(path);return;}for (int i = 0; i < nums.size(); i++) {if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) continue;if (used[i] == false) {used[i] = true;path.push_back(nums[i]);backtracking(nums, used);path.pop_back();used[i] = false;}}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {sort(nums.begin(), nums.end()); // 排序vector<bool> used(nums.size(), false);backtracking(nums, used);return result;
}
used[i - 1] == true
,说明同一树枝使用过,可以重复选used[i - 1] == false
,说明同一树层使用过,不可重复选
5. 动态规划
5.1 最大子序和(连续子数组)
- 力扣:https://leetcode.cn/problems/maximum-subarray/description/
int maxSubArray(vector<int>& nums) {if (nums.size() == 0) return 0;vector<int> dp(nums.size());dp[0] = nums[0];int result = dp[0];for (int i = 1; i < nums.size(); i++) {dp[i] = max(dp[i - 1] + nums[i], nums[i]); if (dp[i] > result) result = dp[i]; }return result;
}
5.2 最长上升序列(不是连续子数组)
- 力扣:https://leetcode.cn/problems/longest-increasing-subsequence/description/
int lengthOfLIS(vector<int>& nums) {if (nums.size() <= 1) return nums.size();vector<int> dp(nums.size(), 1);int result = 0;for (int i = 1; i < nums.size(); i++) {for (int j = 0; j < i; j++) if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);if (dp[i] > result) result = dp[i]; }return result;
}
5.3 最长连续递增子序列(连续子数组)
- 力扣:https://leetcode.cn/problems/longest-continuous-increasing-subsequence/description/
int findLengthOfLCIS(vector<int>& nums) {if (nums.size() == 0) return 0;int result = 1;vector<int> dp(nums.size() ,1);for (int i = 1; i < nums.size(); i++) {if (nums[i] > nums[i - 1]) dp[i] = dp[i - 1] + 1;if (dp[i] > result) result = dp[i];}return result;
}
5.4 最长重复子数组(连续子数组)
- 力扣:https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/
int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp (nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;if (dp[i][j] > result) result = dp[i][j];}}return result;
}
5.5 最长公共子序列(不是连续子序列)
- 力扣:https://leetcode.cn/problems/longest-common-subsequence/description/
int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));for (int i = 1; i <= text1.size(); i++) {for (int j = 1; j <= text2.size(); j++) {if (text1[i - 1] == text2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}return dp[text1.size()][text2.size()];
}
相关文章:
算法题① —— 数组专栏
1. 滑动窗口 1.1 长度最小的子数组 力扣:https://leetcode.cn/problems/minimum-size-subarray-sum/description/ int minSubArrayLen(int s, vector<int>& nums) {int result INT32_MAX; int sum 0; // 子序列的数值之和int subLength 0; // 子序列…...
算法学习笔记(差分约束系统)
前置:spfa 从例题入手: 【模板】差分约束系统 | StarryCoding 题目描述 给定 n n n未知量和一个大小为 m m m的不等式(或等式)组,请你判断这个不等式(或等式)组是否有解。 1 1 1 i i i j …...

HCIP的学习(14)
过滤策略—filter-policy 思科中:分发列表 过滤策略是只能够针对于路由信息进行筛选(过滤)的工具,而无法针对于LSA进行过滤。 在R4的出方向上配置过滤策略,使得R1不能学习到23.0.0.0/24路由信息1、抓取流量 […...

行业新应用:电机驱动将成为机器人的动力核心
电机已经遍布当今社会人们生活的方方面面,不仅应用范围越来越广,更新换代的速度也日益加快。按照工作电源分类,可以将它划分为直流电机和交流电机两大类型。直流电机中,按照线圈类型分类,又可以分为有铁芯的电机、空心…...

大模型模型简化机器人训练;简单易用的 3D 工具Project Neo;特斯拉放出了擎天柱机器人最新训练视频
✨ 1: DrEureka 利用大语言模型自动化将机器人仿真环境训练结果转移到真实世界 DrEureka是一种利用大型语言模型(LLMs)自动化和加速从仿真(sim)到现实世界(real)转移的技术。在机器人技能学习领域&#x…...

Win11安装Docker Desktop运行Oracle 11g 【详细版】
oracle docker版本安装教程 步骤拉取镜像运行镜像进入数据库配置连接数据库,修改密码Navicat连接数据库 步骤 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g运行镜像 docker run -d -p 1521:1521 --name oracle11g registry.cn-ha…...

分布式事务?哪几种方式实现?一文看懂!
什么是分布式事务 分布式事务是指在分布式系统中涉及到多个数据库或多个应用程序之间的事务处理,这些数据库或应用程序可能分布在不同的物理节点上,甚至可能位于不同的地理位置。在分布式事务中,需要确保所有参与者的事务操作都能够保持一致性…...

词令蚂蚁庄园今日答案如何在微信小程序查看蚂蚁庄园今天问题的正确答案?
词令蚂蚁庄园今日答案如何在微信小程序查看蚂蚁庄园今天问题的正确答案? 1、打开微信,点击搜索框; 2、打开搜索页面,选择小程序搜索; 3、在搜索框,输入词令搜索点击进入词令微信小程序; 4、打开…...

【Delphi 爬虫库 6】使用正则表达式提取猫眼电影排行榜top100
正则表达式库的简单介绍 正则表达式易于使用,功能强大,可用于复杂的搜索和替换以及基于模板的文本检查。这对于输入形式的用户输入验证特别有用-验证电子邮件地址等。您还可以从网页或文档中提取电话号码,邮政编码等,在日志文件中…...
Markdown和Latex中文字上下标的方法
技术背景 在Markdown和Latex中,如果只是写公式,不论是行内公式还是行间公式,都可以直接使用^和_这两个符号实现上下标。但有个问题是,如果只是使用公式来做上下标,出来的字体是斜着的。例如这样的语法: $$ …...

VSCode:设置顶部文件标签页滚动条的宽度
使用VSCode打开多个文件后,顶部的文件标签可以通过滚动条进行滚动,但是缺点是该滚动条太窄了,不好选择。 可以通过如下方法修改改滚动条的宽度: 1.点击设置 2.选择工作台->编辑管理->Title Scrollbar Sizing->Large 3.可…...
MySQL变量的定义与使用
# 关系运算 select x < y as 大小判断;# 返回结果1代表true,如果是0代表false select x > y; # 逻辑运算 select TRUE and FALSE;# 依然符合&(and)与、|(or)或、^(xor)亦或。 select …...
python-pytorch seq2seq+attention笔记0.5.00
python-pytorch seq2seq+attention笔记0.5.00 1. LSTM模型的数据size2. 关于LSTM的输入数据包含hn和cn时,hn和cn的size3. LSTM参数中默认batch_first4. Attention机制的三种算法5. 模型的编码器6. 模型的解码器7. 最终模型8. 数据的准备9. 遇到的问题10. 完整代码1. LSTM模型的…...

ansible 深入介绍之 主机清单与playbook
目录 一 inventory 主机清单 1,主机清单 是什么 2,主机清单 定义方式 2.1 自定义主机端口 2.2 定义 范围ip 地址 2.3 定义 拥有相似的主机名 3, inventory 中的变量 3.1 常见 变量 3.2 主机变量 3.3 组变量 3.…...
【MySQ】9.构建高可用数据库:MySQL集群模式部署大全
单个MySQL节点的主要风险在于它构成了一个单点故障,这意味着任何硬件故障、软件崩溃或维护需求都可能导致整个数据库服务中断,从而影响到业务的连续性和数据的安全性。此外,它还限制了系统的扩展性,使得性能提升和负载均衡变得困难…...

Leedcode题目:移除链表元素
题目: 这个题目就是要我们将我们的链表中的值是val的节点删除。 我们题目提供的接口是 传入了指向一个链表的第一个节点的指针,和我们要删除的元素的值val,不只要删除第一个, 思路 我们这里可以创建一个新的链表,…...

1_1. Linux简介
1_1. Linux简介 文章目录 1_1. Linux简介1. 我们用linux来干嘛2. 计算机组成3. 操作系统4. Linux哲学思想5. Linux目录6. Linux分区类型 1. 我们用linux来干嘛 1. 大家都知道linux是一个操作系统,它是一个基础的软件,操作系统是硬件与应用程序的中间层。…...
Swift 函数
函数 一、函数的定义与调用二、函数参数与返回值1、无参数函数2、多参数函数3、无返回值函数4、多重返回值函数5、可选元组返回类型6、隐式返回的函数 三、函数参数标签和参数名称1、指定参数标签2、忽略参数标签3、默认参数值4、可变参数5、输入输出参数 四、函数类型1、使用函…...

QT creator qt6.0 使用msvc2019 64bit编译报错
qt creator qt6.0报错: D:\Qt6\6.3.0\msvc2019_64\include\QtCore\qglobal.h:123: error: C1189: #error: "Qt requires a C17 compiler, and a suitable value for __cplusplus. On MSVC, you must pass the /Zc:__cplusplus option to the compiler."…...
scrapy常用命令总结
1.创建scrapy项目的命令: scrapy startproject <项目名字> 示例: scrapy startproject myspider 2.通过命令创建出爬虫文件,爬虫文件为主要的代码文件,通常一个网站的爬取动作都会在爬虫文件中进行编写。 …...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...