当前位置: 首页 > news >正文

算法题① —— 数组专栏

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 长度最小的子数组 力扣&#xff1a;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; // 子序列…...

算法学习笔记(差分约束系统)

前置&#xff1a;spfa 从例题入手&#xff1a; 【模板】差分约束系统 | StarryCoding 题目描述 给定 n n n未知量和一个大小为 m m m的不等式&#xff08;或等式&#xff09;组&#xff0c;请你判断这个不等式&#xff08;或等式&#xff09;组是否有解。 1 1 1 i i i j …...

HCIP的学习(14)

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

行业新应用:电机驱动将成为机器人的动力核心

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

大模型模型简化机器人训练;简单易用的 3D 工具Project Neo;特斯拉放出了擎天柱机器人最新训练视频

✨ 1: DrEureka 利用大语言模型自动化将机器人仿真环境训练结果转移到真实世界 DrEureka是一种利用大型语言模型&#xff08;LLMs&#xff09;自动化和加速从仿真&#xff08;sim&#xff09;到现实世界&#xff08;real&#xff09;转移的技术。在机器人技能学习领域&#x…...

Win11安装Docker Desktop运行Oracle 11g 【详细版】

oracle docker版本安装教程 步骤拉取镜像运行镜像进入数据库配置连接数据库&#xff0c;修改密码Navicat连接数据库 步骤 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g运行镜像 docker run -d -p 1521:1521 --name oracle11g registry.cn-ha…...

分布式事务?哪几种方式实现?一文看懂!

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

词令蚂蚁庄园今日答案如何在微信小程序查看蚂蚁庄园今天问题的正确答案?

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

【Delphi 爬虫库 6】使用正则表达式提取猫眼电影排行榜top100

正则表达式库的简单介绍 正则表达式易于使用&#xff0c;功能强大&#xff0c;可用于复杂的搜索和替换以及基于模板的文本检查。这对于输入形式的用户输入验证特别有用-验证电子邮件地址等。您还可以从网页或文档中提取电话号码&#xff0c;邮政编码等&#xff0c;在日志文件中…...

Markdown和Latex中文字上下标的方法

技术背景 在Markdown和Latex中&#xff0c;如果只是写公式&#xff0c;不论是行内公式还是行间公式&#xff0c;都可以直接使用^和_这两个符号实现上下标。但有个问题是&#xff0c;如果只是使用公式来做上下标&#xff0c;出来的字体是斜着的。例如这样的语法&#xff1a; $$ …...

VSCode:设置顶部文件标签页滚动条的宽度

使用VSCode打开多个文件后&#xff0c;顶部的文件标签可以通过滚动条进行滚动&#xff0c;但是缺点是该滚动条太窄了&#xff0c;不好选择。 可以通过如下方法修改改滚动条的宽度&#xff1a; 1.点击设置 2.选择工作台->编辑管理->Title Scrollbar Sizing->Large 3.可…...

MySQL变量的定义与使用

# 关系运算 select x < y as 大小判断;# 返回结果1代表true&#xff0c;如果是0代表false select x > y; # 逻辑运算 select TRUE and FALSE;# 依然符合&&#xff08;and&#xff09;与、|&#xff08;or&#xff09;或、^&#xff08;xor&#xff09;亦或。 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&#xff0c;主机清单 是什么 2&#xff0c;主机清单 定义方式 2.1 自定义主机端口 2.2 定义 范围ip 地址 2.3 定义 拥有相似的主机名 3&#xff0c; inventory 中的变量 3.1 常见 变量 3.2 主机变量 3.3 组变量 3.…...

【MySQ】9.构建高可用数据库:MySQL集群模式部署大全

单个MySQL节点的主要风险在于它构成了一个单点故障&#xff0c;这意味着任何硬件故障、软件崩溃或维护需求都可能导致整个数据库服务中断&#xff0c;从而影响到业务的连续性和数据的安全性。此外&#xff0c;它还限制了系统的扩展性&#xff0c;使得性能提升和负载均衡变得困难…...

Leedcode题目:移除链表元素

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

1_1. Linux简介

1_1. Linux简介 文章目录 1_1. Linux简介1. 我们用linux来干嘛2. 计算机组成3. 操作系统4. Linux哲学思想5. Linux目录6. Linux分区类型 1. 我们用linux来干嘛 1. 大家都知道linux是一个操作系统&#xff0c;它是一个基础的软件&#xff0c;操作系统是硬件与应用程序的中间层。…...

Swift 函数

函数 一、函数的定义与调用二、函数参数与返回值1、无参数函数2、多参数函数3、无返回值函数4、多重返回值函数5、可选元组返回类型6、隐式返回的函数 三、函数参数标签和参数名称1、指定参数标签2、忽略参数标签3、默认参数值4、可变参数5、输入输出参数 四、函数类型1、使用函…...

QT creator qt6.0 使用msvc2019 64bit编译报错

qt creator qt6.0报错&#xff1a; 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项目的命令&#xff1a;     scrapy startproject <项目名字> 示例&#xff1a;     scrapy startproject myspider 2.通过命令创建出爬虫文件&#xff0c;爬虫文件为主要的代码文件&#xff0c;通常一个网站的爬取动作都会在爬虫文件中进行编写。 …...

FORK客户端与GitHub高效协作指南

1. 为什么选择FORK客户端与GitHub协作 作为一个常年混迹在代码仓库的老司机&#xff0c;我试过几乎所有主流的Git图形化工具。FORK客户端给我的第一印象就是——清爽。没有复杂的界面&#xff0c;没有多余的功能&#xff0c;就像它的名字一样&#xff0c;专注做好代码分支管理…...

OFA模型在零售行业的视觉问答应用案例

OFA模型在零售行业的视觉问答应用案例 1. 引言 走进任何一家现代零售商店&#xff0c;你都会看到成千上万的商品整齐地陈列在货架上。但对于店员来说&#xff0c;要快速准确地回答"这个品牌的洗发水有没有无硅油版本&#xff1f;"或者"这款饼干是否含有坚果成…...

解决Android 12 NFC功能失效:PendingIntent.FLAG_MUTABLE的正确用法

Android 12 NFC开发实战&#xff1a;PendingIntent可变性标志的深度解析 在移动支付和门禁系统逐渐普及的今天&#xff0c;NFC技术已经成为现代智能手机不可或缺的功能之一。然而&#xff0c;随着Android系统的版本迭代&#xff0c;开发者们不得不面对各种兼容性挑战。特别是在…...

融合多尺度特征与注意力机制的YOLOv5红外小目标检测优化方案

1. 红外小目标检测的技术挑战 红外遥感图像中的小目标检测一直是计算机视觉领域的难点问题。与可见光图像相比&#xff0c;红外图像具有低对比度、高噪声、目标尺寸小等特点&#xff0c;这使得传统检测算法难以取得理想效果。在实际应用中&#xff0c;军事侦察中的无人机识别、…...

AI大模型进化地图:小白也能看懂的技术架构与未来趋势(收藏版)

本文深入剖析AI模型的技术架构、能力瓶颈及商业压力&#xff0c;揭示未来AI模型的四类形态&#xff1a;通用基础大模型、深度推理模型、边缘轻量模型和垂直领域专业模型。文章通过DeepSeek-R1和Google Gemini的案例&#xff0c;量化分析不同模型类型的业务逻辑差异&#xff0c;…...

利用华为云MaaS与OpenTiny NEXT构建智能电商后台:从传统操作到AI驱动的自动化升级

1. 传统电商后台的痛点与AI转型机遇 电商后台管理系统一直是运营人员的"战场"&#xff0c;每天面对商品上下架、库存调整、数据统计等重复性工作。记得三年前我参与过一个母婴电商项目&#xff0c;运营团队每天要手动处理上百个商品信息更新&#xff0c;高峰期经常加…...

《QGIS快速入门与应用基础》248:对齐工具(左对齐/居中对齐/右对齐)对齐工具(左对齐/居中对齐/右对齐)对齐工具(左对齐/居中对齐/右对齐)对齐工具(左对齐/居中对齐/右对齐)对齐工具(左对齐/

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

哪种编程语言更契合 Claude Code?:从代码行数到 Token 时代的效能重构

在软件开发的漫长岁月中&#xff0c;我们曾习惯于用代码行数来衡量工作量&#xff1b;而今&#xff0c;在 AI 编程的纪元&#xff0c;工作量的天平正向 Token 计数倾斜。就在几周前&#xff0c;GitHub 上涌现出一项令人侧目的基准测试&#xff1a;mame/ai-coding-lang-bench。其…...

Ruoyi-Vue3实战:10分钟搞定学生管理系统CRUD(附完整SQL)

Ruoyi-Vue3学生管理系统实战&#xff1a;从零到部署的完整指南 在当今快速迭代的开发环境中&#xff0c;选择高效的技术栈至关重要。Ruoyi-Vue3作为基于Spring Boot和Vue3的企业级开发框架&#xff0c;以其模块化设计和丰富的功能组件&#xff0c;成为快速构建管理系统的首选方…...

永磁同步电机的 MTPA + 弱磁控制算法 Simulink 模型探索

永磁同步电机的MTPA弱磁控制算法simulink模型。 转速从4000变到16000转&#xff0c;效果较好&#xff0c;附赠核心模型对应公式文档。在电机控制领域&#xff0c;永磁同步电机&#xff08;PMSM&#xff09;因其高效、高功率密度等优点&#xff0c;被广泛应用于各种工业和民用场…...