算法打卡第三天

10.长度最小的子数组

(力扣209题)

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

使用 滑动窗口

10.1 滑动窗口

滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果

滑动窗口也可以理解为双指针法的一种,

使用一个for循环,j是滑动窗口的终止位置,i是起始位置,也是动态指针,

窗口的起始位置i:当前窗口值大于等于传入的值,i移动;

窗口的结束位置j:j就是遍历数组的指针,是for循环里的索引

代码

#include <iostream>
#include <vector>
using namespace std;
// 暴力破解
class Solution1
{
public:int minSubArrayLen(int target, vector<int> &nums){int result = INT32_MAX; // 最终的结果 INT32_MAX 是一个常量,表示 32 位有符号整数的最大值。int sum = 0;            // 子序列的数值之和int length = 0;         // 子序列的长度for (int i = 0; i < nums.size(); i++) // 字序列起点{sum = 0;for (int j = i; j < nums.size(); j++) // 字序列终点{// 遍历的数组元素存入子序列sum += nums[j];if (sum >= target){// 总和大于等于目标值length = j - i + 1; // 子序列的长度// 找符合条件最小的长度result = length < result ? length : result;break;}}}// result结果没有变化,没有找到return result == INT32_MAX ? 0 : result;}
};class Solution
{
public:int minSubArrayLen(int target, vector<int> &nums){int result = INT32_MAX;               // 最终的结果 INT32_MAX 是一个常量,表示 32 位有符号整数的最大值。int sum = 0;                          // 子序列的数值之和int length = 0;                       // 子序列的长度int i = 0;                            // 窗口的起始位置for (int j = 0; j < nums.size(); j++) // 遍历数组{// 遍历的数组元素存入子序列sum += nums[j];while (sum >= target){// 子序列大于目标值开始位置变化 寻找最小的序列length = j - i + 1;result = result < length ? result : length;sum -= nums[i++];}}// 没找到 返回0return result == INT32_MAX ? 0 : result;}
};
int main()
{vector<int> arr1 = {2, 3, 1, 2, 4, 3};vector<int> arr2 = {1, 4, 4};vector<int> arr3 = {1, 1, 1, 1, 1, 1, 1, 1};Solution s;cout << s.minSubArrayLen(7, arr1) << endl;cout << s.minSubArrayLen(4, arr2) << endl;cout << s.minSubArrayLen(11, arr3) << endl;return 0;
}

11.水果成篮

(力扣904题)

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类

你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:

  • 你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
  • 你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
  • 一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。

给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

示例 1:

输入:fruits = [1,2,1]
输出:3
解释:可以采摘全部 3 棵树。

示例 2:

输入:fruits = [0,1,2,2]
输出:3
解释:可以采摘 [1,2,2] 这三棵树。
如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。

示例 3:

输入:fruits = [1,2,3,2,2]
输出:4
解释:可以采摘 [2,3,2,2] 这四棵树。
如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。

示例 4:

输入:fruits = [3,3,3,1,2,1,1,2,3,3,4]
输出:5
解释:可以采摘 [1,2,1,1,2] 这五棵树。

和上面的题的区别是这个是找最长子序列

  • 思路
  1. 初始化滑动窗口的左右边界 ij,以及一个哈希表 basket 来记录窗口内水果的种类和数量。
  2. 遍历数组,将水果加入窗口(basket),并更新其数量。
  3. 当窗口内的水果种类超过两种时,收缩窗口的左边界(i),减少对应水果的数量,直到窗口内水果种类不超过两种。
  4. 在每次循环中,更新最长子数组的长度(result),即当前窗口的大小(j - i + 1)。
  5. 最终返回 result,即最长的满足条件的子数组长度

实例

#include <iostream>
#include <vector>
#include <unordered_map>using namespace std;
// 这个是找最长的序列
class Solution
{
public:int totalFruit(vector<int> &fruits){// 收集最终水果的数目int result = 0;// /篮子中的水果种类数量unordered_map<int, int>  basket;// 滑动窗口的开始位置int i = 0;for (int j = 0; j < fruits.size(); j++){basket[fruits[j]]++;// 篮子水果种类大于2while(basket.size() > 2){basket[fruits[i]]--;// 如果某种水果数量为0,从篮子中移除if( basket[fruits[i]] == 0){basket.erase(fruits[i]);}i++;}result = max(result, j - i + 1);}return result;}};

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

12 螺旋矩阵

(力扣59题)

示例 1:

img

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

核心思路是通过逐层填充矩阵的外圈,逐步向内收缩,直到填充完整个矩阵

  1. 初始化一个 n×n 的二维数组 res,所有元素初始值为 0。
  2. 使用变量 startxstarty 表示当前层的起始位置,loop 表示需要填充的圈数,offset 表示当前层的边界偏移量。
  3. 使用一个循环逐层填充矩阵,每次循环填充当前层的上、右、下、左四条边。
  4. 在填充每条边时,通过 for 循环依次赋值,并更新 count
  5. 每完成一层后,更新 startxstartyoffset,进入内层继续填充。
  6. 如果矩阵的维度 n 是奇数,最后单独填充矩阵中心的值。

实例

// 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,
// 且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
#include <iostream>
#include <vector>
using namespace std;class Solution
{
public:vector<vector<int>> generateMatrix(int n){// 大小为 n×n 的二维向量,其所有元素的初始值都为 0。vector<vector<int>> res(n, vector<int>(n, 0));int startx = 0, starty = 0; // 数组的行列起始位置int loop = n / 2;           // 循环次数int mid = n / 2;            // 中间的值 n = 5 中间的位置就是2,2int count = 1;              // 给数组赋值int offset = 1;             // 缩进 控制的终止位置int i, j = 0;while (loop--){i = startx;j = starty;// 下面开始的四个for就是模拟转了一圈// 模拟填充上行从左到右(左闭右开)for (j; j < n - offset; j++){// 储存元素res[i][j] = count++;}for (i; i < n - offset; i++){// 储存元素res[i][j] = count++;}for (; j > starty; j--){// 储存元素res[i][j] = count++;}for (; i > startx; i--){// 储存元素res[i][j] = count++;}// 下一圈起始位置+1 进入内圈startx++;starty++;// 进入内圈偏移量+1以便同步offset++;}// / 如果n为奇数的话,需要单独给矩阵最中间的位置赋值 就是countif (n % 2) {res[mid][mid] = count;}return res;}
};
int main()
{int n = 0;cout << "请输入一个正整数:";cin >> n;Solution s1;vector<vector<int>> res = s1.generateMatrix(n);for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){cout << res[i][j] << " ";}cout << endl;}return 0;
}

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

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

相关文章

数字电子技术基础(六十二)——使用Multisim软件绘制边沿触发的D触发器和JK触发器

1 使用Mulitism软件模拟时钟触发的D触发器 D触发器是一种基本的数字电路存储元件&#xff0c;它在时钟信号的边沿将输入数据D传递到输出Q。下面开始使用Multisim软件来模拟时钟触发的D触发器。 器件选择&#xff1a; 触发器选择&#xff1a;在组选项栏中点击Misc Digital&am…

自动获取新版本 js 静态文件

场景 代码里有静态js文件&#xff0c;发布一个版本1.0在真实环境&#xff0c;再修改重新发布2.0&#xff0c;用户如何得到新版本&#xff1f; 方法 一、文件名哈希策略&#xff08;最推荐&#xff09; 通过构建工具为文件生成唯一哈希值&#xff0c;使每次更新后的文件名不同…

第13天-用BeautifulSoup解析网页数据:以百度热搜可视化为例

一、BeautifulSoup简介 BeautifulSoup是Python最受欢迎的HTML/XML解析库之一,它能将复杂的网页文档转换为树形结构,支持多种解析器(如lxml、html.parser)。配合requests库,可以快速构建网页爬虫项目。 二、环境准备 pip install requests beautifulsoup4 matplotlib 三…

PyTorch中cdist和sum函数使用详解

torch.cdist 是 PyTorch 中用于计算**两个张量之间的成对距离&#xff08;pairwise distance&#xff09;**的函数&#xff0c;常用于点云处理、图神经网络、相似性度量等场景。 基本语法 torch.cdist(x1, x2, p2.0)参数说明&#xff1a; 参数说明x1一个形状为 [B, M, D] 或 …

智能视觉检测技术:制造业质量管控的“隐形守护者”

在工业4.0浪潮的推动下&#xff0c;制造业正经历一场以智能化为核心的变革。传统人工质检模式因效率低、误差率高、成本高昂等问题&#xff0c;逐渐难以满足现代生产对高精度、高速度的需求。智能视觉检测技术作为人工智能与机器视觉融合的产物&#xff0c;正成为制造业质量管控…

水浒后传-暹罗国建立新国家的故事

第一节《怒海余生》 李俊率领残部穿越台风海域&#xff0c;在暹罗湾遭遇葡萄牙舰队突袭。童猛为掩护船队突围&#xff0c;驾驶火船与敌舰同归于尽&#xff0c;留下最后的忠义绝唱。 第二节《血染王城》 李俊与暹罗旧贵族势力在曼谷河畔展开决战。中原阵法与暹罗象兵碰撞出惊心…

1.portainer

容器可视化工具 商业版Business、社区版Community docker容器部署portainer&#xff0c;对外暴露端口9443是一个自签名的证书端口。还有另外一个暴露的端口8000。 volume 要想看得到&#xff0c;需要通过 portainer可视化界面看到volume&#xff0c;就必须使用&#xff1a; d…

使用Starrocks制作拉链表

5月1日向ods_order_info插入3条数据&#xff1a; CREATE TABLE ods_order_info(dt string,id string COMMENT 订单编号,total_amount decimal(10,2) COMMENT 订单金额 ) PRIMARY KEY(dt, id) PARTITION BY (dt) DISTRIBUTED BY HASH(id) PROPERTIES ( "replication_num&q…

Linux下Docker使用阿里云镜像加速器

在中国大陆环境中配置 Docker 使用阿里云镜像加速器&#xff0c;并确保通过 Clash 代理访问 Docker Hub 我这里用的Debian12。 步骤 1&#xff1a;获取阿里云镜像加速器地址 登录阿里云容器镜像服务控制台&#xff1a;(qinyang.wang) 网址&#xff1a;阿里云登录 - 欢迎登录阿…

Electron 后台常驻服务实现(托盘 + 开机自启)

基于 electron-vite-vue 项目结构 本篇将详细介绍如何为 Electron 应用实现后台常驻运行&#xff0c;包括&#xff1a; ✅ 创建系统托盘图标&#xff08;Tray&#xff09;✅ 支持点击托盘菜单控制窗口显示/退出✅ 实现开机自启功能&#xff08;Auto Launch&#xff09; &#…

opencv的直方图

理解并运用 OpenCV 中的图像直方图 &#x1f4ca;&#x1f5bc;️ 图像直方图是计算机视觉和图像处理中一种基本且强大的工具&#xff0c;它提供了图像像素强度分布的图形化表示。OpenCV 作为一个全面的计算机视觉库&#xff0c;内置了计算和可视化直方图的强大功能。本文将深…

Linux 内核探秘:从零构建 GPIO 设备驱动程序实战指南

在嵌入式系统开发领域&#xff0c;GPIO&#xff08;通用输入 / 输出&#xff09;作为硬件与软件交互的桥梁&#xff0c;是实现设备控制与数据采集的基础。编写高效、稳定的 GPIO 设备驱动程序&#xff0c;对于发挥硬件性能至关重要。本文将深入剖析 Linux 内核中 GPIO 驱动开发…

嵌入式单片机中STM32F1演示寄存器控制方法

该文以STM32F103C8T6为示例,演示如何使用操作寄存器的方法点亮(关闭LED灯),并讲解了如何调试,以及使用宏定义。 第一:操作寄存器点亮LED灯。 (1)首先我们的目的是操作板子上的LED2灯,对其实现点亮和关闭操作。打开STM32F103C8T6的原理图,找到LED2的位置。 可以看到…

牛客网 NC16407 题解:托米航空公司的座位安排问题

牛客网 NC16407 题解&#xff1a;托米航空公司的座位安排问题 题目分析 解题思路 本题可以采用深度优先搜索(DFS)来解决&#xff1a; 从左上角开始&#xff0c;按行优先顺序遍历每个座位对于每个座位&#xff0c;有两种选择&#xff1a; 选择该座位&#xff08;如果满足条件…

智慧展馆数字孪生平台

2022年进博会上&#xff0c;国家会展中心凭借“数字孪生机器人调度平台”惊艳全球&#xff0c;实现人机协同、虚实联动的智慧运营&#xff1b;2023年天府农博园通过“BIMIoT”技术&#xff0c;贯穿展馆全生命周期管理&#xff0c;成为农业会展的数字化标杆。这些案例背后&#…

胡说八道1---豆包问答总结

用户提问 1 指令&#xff1a;25 - - [21/May/2025:01:35:45 0000] “POST /prod-api/system/base/getList HTTP/1.1” 405 559 “http://192.168.1.109:16380/login” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 …

C# AOP编程

AOP(面向切片编程的概念我这里就不介绍了&#xff0c;这里先介绍一下C#中的AOP编程框架。 1.AOP的分类 .net下支持AOP的框架很多&#xff0c;搜了一下有&#xff1a;PostSharp、AspectInjector、Fody 、Castle Windsor、Spring.NET、Ninject、Unity等&#xff0c;实现的方式主要…

linux编译安装srs

下载编译运行 git clone https://github.com/ossrs/srs.git cd srs/trunk ./configure --h265on make需要安装 yum install -y patch yum install -y unzip yum install -y tcl编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/s…

EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析

引言 在数智化转型浪潮席卷各行各业的今天,医疗领域同样面临着提升运营效率、改善患者体验和加强系统可靠性的多重挑战。Rockwell Automation于2025年5月20日推出的EtherNet/IP机柜内解决方案,为医疗中心的自动化升级提供了一种创新路径。本报告将深入分析这一解决方案的核心…

大模型下载到本地

一、huggingface 方式一 from huggingface_hub import snapshot_downloadlocal_dir "./origin" model_name "Qwen/Qwen2.5-1.5B"# snapshot_download(repo_idmodel_name, cache_dirlocal_dir) model_dir snapshot_download(model_name,cache_dirlocal…