LeetCode算法——滑动窗口矩阵篇

1、长度最小的子数组

题目描述:

解法:

        设一个 for 循环来改变指向窗口末尾的指针,再不断抛弃当前窗口内的首元素

        最终确定满足条件的最小长度

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size(), result = INT_MAX, sum = 0, left = 0;for(int right = 0; right < n; ++right){sum += nums[right];while(sum >= target){result = min(result, right - left + 1);sum -= nums[left];  // 从 sum 中减去当前 i 指向的数值left++;}}return result <= n ? result : 0;}   
};

          当前窗口内的元素和大于目标时,先缩小窗口大小,观测缩小后的窗口内的元素之和是否仍然满足大于目标的条件。以下 while 循环的主要作用是更新窗口起始点

while(sum >= target){result = min(result, right - left + 1);sum -= nums[left];  // 从 sum 中减去当前 i 指向的数值left++;
}

2、无重复字符的最长子串

题目描述:

解法:

        建立一个哈希表,将不重复的元素加入表中,继续向后遍历,一旦出现重复元素,删掉哈希表中最左侧的元素,继续移动窗口直至遍历完字符串

class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_set<char> map;int left = 0;int res = 0;if(s.size() == 0) return 0;for(int i = 0; i < s.size(); ++i){// 遇到重复字符while(map.find(s[i]) != map.end()){map.erase(s[left]);left++;}res = max(res, i - left + 1);  // 更新长度map.insert(s[i]);  // 向哈希表中加入该元素}return res;}
};

3、有效的数独

题目描述:

解法:

        这题的解法很巧妙,大家可以去看这位老师的题解

        建立3个二维数组 row[9][10]、col[9][10]、box[9][10] 分别对应3*3矩阵块,用模拟哈希表的思想来判断当前数字是否在这3个二维数组中出现过

        为什么 row[9][10] 第二维是10呢?因为数字中包含9,如果设为 row[9][9] 会提醒溢出,[9]的下标最多到8,无法存储数字9

        box[ j/3 + (i/3)*3 ]是最关键的地方,用来判断当前数字位于哪一个3*3矩阵块,原理是:

        原有矩阵为 9*9 ,按照 x轴 可分为0、1、2三个区域,所以 j/3 就可以确定当前数字在0、1、2中的哪一个区域

        同理可根据  i/3 来确定当前数字在 y 轴上的哪一个区域,选定 y轴 上的0、1、2区域后,由于 区域0 后面还有2个区域,同理1、2后面也都各有2个区域,所以使用 (i/3)*3 来确定最终块的位置

        这里是先选定 j 再去细分 i 的,两者可以颠倒过来,即

        box[ i/3 + (j/3)*3 ]

class Solution {
public:bool isValidSudoku(vector<vector<char>>& board) {// 建立3个类似哈希表的二维数组,分别判断当前数字是否在行、列、box中出现过int row[9][10] = {0};int col[9][10] = {0};int box[9][10] = {0};for(int i = 0; i < 9; ++i){for(int j = 0; j < 9; ++j){if(board[i][j] == '.') continue;// 将board[i][j]中存储的数字字符转换成整数int curNum = board[i][j] - '0';if(row[i][curNum]) return false;  // 已经在当前行出现过if(col[j][curNum]) return false;if(box[i/3 + (j/3)*3][curNum]) return false;row[i][curNum] = 1;col[j][curNum] = 1;box[i/3 + (j/3)*3][curNum] = 1;}}return true;}
};

4、螺旋矩阵

题目描述:

解法:

        K神无敌,都说累了

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> res;int l = 0, r = matrix[0].size() - 1, t = 0, b = matrix.size() - 1;while(true){for(int i = l; i <= r; ++i){res.push_back(matrix[t][i]);  // 1、2、3入,5入}if(++t > b) break;for(int i = t; i <= b; ++i){res.push_back(matrix[i][r]);   // 6、9入}if(l > --r) break;for(int i = r; i >= l; i--){res.push_back(matrix[b][i]);  // 8、7入}if (t > --b) break;for(int i = b; i >= t; i--){res.push_back(matrix[i][l]);  // 4入}if (++l > r) break;}return res;}
};

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

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

相关文章

duilib中设置窗口透明度的接口CPaintManagerUI::SetTransparent有问题导致使用duilib窗口实现异形窗口无效的排查

目录 1、duilib框架中设置窗口透明度的代码说明 2、UpdateLayeredWindow调用失败,发现添加的WS_EX_LAYERED风格被删除了 3、窗口有WS_EX_LAYERED风格了,但UpdateLayeredWindow调用依旧失败 4、如何知道SetLayeredWindowAttributes函数调用之后再调用UpdateLayeredWindow…

netty构建http服务器

Netty 是一个高性能的异步事件驱动的网络应用框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。要使用 Netty 搭建一个支持 HTTP 方法&#xff08;GET, POST, PUT, DELETE&#xff09;的 HTTP 服务器&#xff0c;可以按照以下步骤进行操作。 准备工作 添加依赖…

苹果电脑暂存盘已满怎么清理 Mac系统如何清理磁盘空间 清理MacBook

Mac电脑用户在长时间使用电脑之后&#xff0c;时常会看到“暂存盘已满”的提示&#xff0c;这无疑会给后续的电脑使用带来烦恼&#xff0c;那么苹果电脑暂存盘已满怎么清理呢&#xff0c;下面将给大家带来一些干货帮你更好地解决这个问题。 首先我们要搞明白为什么暂存盘会满&…

c++ 智能指针shared_ptr与make_shared

shared_ptr是C11引入的一种智能指针&#xff0c;‌它允许多个shared_ptr实例共享同一个对象&#xff0c;‌通过引用计数来管理对象的生命周期。‌当最后一个持有对象的shared_ptr被销毁时&#xff0c;‌它会自动删除所指向的对象。‌这种智能指针主要用于解决资源管理问题&…

select count小坑

count(字段&#xff09;如果字段有NULL则不会统计进来&#xff0c;count(1)和count(*)则没有这个问题

警务平台app

智慧公安以大数据、云计算、人工智能、物联网和移动互联网技术为支撑&#xff0c;以“打、防、管、控”为目的&#xff0c;综合研判为核心&#xff0c;共享信息数据资源&#xff0c;融合业务功能&#xff0c;构建公安智慧大数据平台&#xff0c;实现公安信息数字化、网络化和智…

【运维自动化-配置平台】模型及模型关联最小化实践

蓝鲸智云配置平台&#xff0c;以下简称配置平台 我们知道主机是配置平台最常见的管控资源对象&#xff0c;在业务拓扑里可以通过划分模块来清晰的可视化管理&#xff1b;那其他资源如何通过配置平台来纳管呢&#xff0c;比如网络设备交换机。场景需求&#xff1a;如何把交换机…

C++ 指针各类型详细解析

文章目录 1. 内存地址 2. 指针 3. 使用指针 4. Null 指针 5. 指针的算术运算 递增一个指针 递减一个指针 指针的比较 6. 指针和数组 7. 指针数组 8. 指向指针的指针&#xff08;多级间接寻址&#xff09; 9. 传递指针给函数 1. 内存地址 通过指针&#xff0c;可以…

【前端 10】初探BOM

初探BOM&#xff1a;浏览器对象模型 在JavaScript的广阔世界中&#xff0c;BOM&#xff08;Browser Object Model&#xff0c;浏览器对象模型&#xff09;扮演着举足轻重的角色。它为我们提供了一套操作浏览器窗口及其组成部分的接口&#xff0c;让我们能够通过编写JavaScript…

QT--线程

一、线程QThread QThread 类提供不依赖平台的管理线程的方法&#xff0c;如果要设计多线程程序&#xff0c;一般是从 QThread继承定义一个线程类&#xff0c;在自定义线程类里进行任务处理。qt拥有一个GUI线程,该线程阻塞式监控窗体,来自任何用户的操作都会被gui捕获到,并处理…

Redisson中的RBlockingQueue的使用场景及例子

Redisson 的 RBlockingQueue 是一个实现了 Java BlockingQueue 接口的分布式队列&#xff0c;它可以用于在分布式系统中实现生产者-消费者模式。RBlockingQueue 提供了线程安全的阻塞队列操作&#xff0c;允许生产者在队列满时阻塞&#xff0c;消费者在队列空时阻塞&#xff0c…

【PyQt5】一文向您详细介绍 setPlaceholderText() 的作用

【PyQt5】一文向您详细介绍 setPlaceholderText() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通…

GraphRAG:< Not supported between instances of ‘NoneType‘ and ‘int‘

GraphRAG&#xff1a;< Not supported between instances of NoneType and int 0. 错误信息1. 解决方法 0. 错误信息 使用 GraphRAG 调用 vllm 的 openai api 时&#xff0c;报错&#xff1a; Not supported between instances of NoneType and int1. 解决方法 vi /root/…

yum失效-简单配置阿里云yum源

更换阿里云yum源 最近跟很多人反馈,centos7 yum 源失效的问题,这里简单做个总结,操作步骤如下 1. 打开centos的yum文件夹输入命令进入yum 配置文件所在位置 cd /etc/yum.repos.d/ 2. 用wget下载repo文件输入命令 wget http://mirrors.aliyun.com/repo/Centos-7.repo 3. 如…

脑网络布线成本优化——从Caja守恒原则到最小化成本的探索

脑网络布线成本优化——从Caja守恒原则到最小化成本的探索 Caja守恒原则的核心作用 Caja守恒原则&#xff0c;即大脑组织的布线成本最小化原则&#xff0c;是神经科学中的一个重要概念。它指出&#xff0c;大脑在组织结构上倾向于最小化连接神经元以构成环路或网络所涉及的布…

实时目标检测神器:YOLOv5的安装与使用详解

yolov5 YOLOv5 是一种流行的目标检测算法,属于 YOLO(You Only Look Once)系列的第五代版本。 YOLO 算法以其快速和高效而闻名,在实时目标检测任务中表现出色。 关键特点: 快速检测:YOLOv5 能够实现快速的目标检测,适合需要实时处理的应用场景 单阶段检测器:与两阶段…

【MySQL】记录MySQL加载数据(LOAD DATA)

MySQL LOAD DATA 一、背景二、模拟生成用户信息三、加载到mysql表3.1、建表语句3.2 加载数据3.3、查看结果 一、背景 现在有个需求是将用户信息存入student.data文件中&#xff0c;在现在load到数据库中 二、模拟生成用户信息 假设用户信息&#xff0c;包含姓名&#xff0c;…

C++和R穿刺针吸活检肿瘤算法模型模拟和进化动力学量化差异模型

&#x1f3af;要点 &#x1f3af;模拟肿瘤细胞增生进化轨迹 | &#x1f3af;肿瘤生长的随机空间细胞自动机模型 | &#x1f3af;模拟穿刺活检的收集空间局部的肿瘤块&#xff0c;模拟针吸活检采集长而薄的组织样本 | &#x1f3af;构建不同参数模拟合成肿瘤测试集 | &#x1f…

Rust:cargo的常用命令

1.查看版本 $ cargo --version cargo 1.79.0 (ffa9cf99a 2024-06-03) 2.创建新的项目 $ cargo new hello 创建后的目录结构为 $ tree hello/ hello/ ├── Cargo.toml └── src └── main.rs 3.运行项目 $ cd hello $ cargo run Compiling hello v0.1.0 (/home/c…