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

LeetCode之矩阵

36. 有效的数独

class Solution {// 方法 isValidSudoku 接收一个字符二维数组 board,表示数独棋盘,返回是否有效public boolean isValidSudoku(char[][] board) {// 创建三个二维数组来记录每一行、列和子框中数字的出现次数int[][] rows = new int[9][9];      // 行记录int[][] columns = new int[9][9];   // 列记录int[][][] subboxes = new int[3][3][9]; // 子框记录// 遍历整个棋盘for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {char c = board[i][j]; // 当前单元格的字符// 如果单元格不是空格(即不是 '.')if (c != '.') {// 计算当前数字的索引(1-9 映射到 0-8) 如果重复相同的数映射到同一个位置会不断+1,如果重复就会大于1int index = c - '0' - 1; // 在行、列和子框中更新当前数字的出现次数rows[i][index]++;        // 增加行的计数columns[j][index]++;     // 增加列的计数subboxes[i / 3][j / 3][index]++; // 增加子框的计数// 如果某个位置的计数超过 1,说明出现重复,返回 falseif (rows[i][index] > 1 || columns[j][index] > 1 || subboxes[i / 3][j / 3][index] > 1) {return false; // 数独无效}}}}// 如果循环结束,说明没有发现重复,返回 truereturn true; // 数独有效}
}

54. 螺旋矩阵

class Solution {// // 方法 spiralOrder 接收一个二维整数数组 matrix,返回矩阵的螺旋顺序遍历结果public List<Integer> spiralOrder(int[][] matrix) {// 获取矩阵的行数int m = matrix.length;// 获取矩阵的列数int n = matrix[0].length;// 定义四个边界// 上边界int up = 0;// 左边界int left = 0;// 右边界int right = n - 1;// 下边界int down = m - 1;// 存储结果的列表List<Integer> result =  new ArrayList<>();// 使用循环遍历,直到所有元素都被访问while(true) {// 从左到右遍历上边界for (int i = left; i <= right; i++) {// 添加当前元素到结果列表中result.add(matrix[up][i]);}// 更新上边界,检查是否已超出下边界if (++up > down) {// 如果上边界超过下边界,结束循环break;}// 从上到下遍历右边界for (int i = up; i <= down; i++) {result.add(matrix[i][right]); // 添加当前元素到结果列表中}// 更新右边界,检查是否已超出左边界if (--right < left) {break; // 如果右边界超过左边界,结束循环}// 从右到左遍历下边界for (int i = right; i >= left; i--) {result.add(matrix[down][i]); // 添加当前元素到结果列表中}// 更新下边界,检查是否已超出上边界if (--down < up) {break; // 如果下边界超过上边界,结束循环}// 从下到上遍历左边界for (int i = down; i >= up; i--) {result.add(matrix[i][left]); // 添加当前元素到结果列表中}// 更新左边界,检查是否已超出右边界if (++left > right) {break; // 如果左边界超过右边界,结束循环}}// 返回螺旋顺序遍历的结果return result;}}

48. 旋转图像

class Solution {// 方法 rotate 接收一个二维整数数组 matrix,表示要旋转的矩阵public void rotate(int[][] matrix) {// 获取矩阵的行数 mint m = matrix.length;// 获取矩阵的列数 nint n = matrix[0].length;// 创建一个临时矩阵,用于存储原矩阵的值int[][] temp = new int[m][];for (int i = 0; i < m; i++) {// 深拷贝原矩阵的每一行,以防旋转时修改原矩阵的值temp[i] = matrix[i].clone(); // 使用 clone() 方法进行深拷贝}// 遍历临时矩阵,将值重新赋值到原矩阵中的适当位置,完成顺时针旋转for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {// 根据旋转公式,把 temp[i][j] 放到 matrix[j][n - 1 - i]matrix[j][n - 1 - i] = temp[i][j];}}}}

73. 矩阵置零

class Solution {// 方法 setZeroes 接收一个二维整数数组 matrix,表示要处理的矩阵public void setZeroes(int[][] matrix) {int m = matrix.length; // 获取矩阵的行数int n = matrix[0].length; // 获取矩阵的列数// 创建两个标记数组,用于记录需要置零的行和列boolean[] row = new boolean[m]; // 行标记位boolean[] col = new boolean[n]; // 列标记位// 第一次遍历整个矩阵,查找值为 0 的元素for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == 0) { // 如果当前元素为 0row[i] = true; // 将对应的行标记为 truecol[j] = true; // 将对应的列标记为 true}}}// 第二次遍历,根据标记修改矩阵中的元素for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {// 如果该行或该列需要置为 0,则将当前元素设置为 0if (row[i] || col[j]) {matrix[i][j] = 0; // 设置当前元素为 0}}}}
}

289. 生命游戏

class Solution {// 方法 gameOfLife 接收一个二维整数数组 board,表示细胞的当前状态public void gameOfLife(int[][] board) {// 创建一个数组来表示邻居的位置变化,邻居可以在横向、纵向和对角线int[] neighbors = {0, 1, -1}; int rows = board.length; // 获取行数int cols = board[0].length; // 获取列数// 创建一个复制数组 copyBoard,用于存储当前状态int[][] copyBoard = new int[rows][cols];// 从原数组复制一份到 copyBoard 中for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {copyBoard[row][col] = board[row][col]; // 深拷贝细胞状态}}// 遍历面板中的每一个细胞for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {// 统计当前细胞八个相邻细胞中的活细胞数量int liveNeighbors = 0;// 检查当前细胞的所有邻居for (int i = 0; i < 3; i++) { // 遍历邻居的行偏移for (int j = 0; j < 3; j++) { // 遍历邻居的列偏移// 排除当前细胞自身if (!(neighbors[i] == 0 && neighbors[j] == 0)) {int r = (row + neighbors[i]); // 计算邻居的行坐标int c = (col + neighbors[j]); // 计算邻居的列坐标// 检查邻居是否在矩阵内,并且是活细胞if ((r < rows && r >= 0) && (c < cols && c >= 0) && (copyBoard[r][c] == 1)) {liveNeighbors += 1; // 统计活细胞数量}}}}// 应用生命游戏规则:// 规则 1 或 规则 3:活细胞与少于 2 个或多于 3 个活邻居则死亡if ((copyBoard[row][col] == 1) && (liveNeighbors < 2 || liveNeighbors > 3)) {board[row][col] = 0; // 死亡}// 规则 4:死细胞有正好 3 个活邻居则复活if (copyBoard[row][col] == 0 && liveNeighbors == 3) {board[row][col] = 1; // 复活}}}}
}

相关文章:

LeetCode之矩阵

36. 有效的数独 class Solution {// 方法 isValidSudoku 接收一个字符二维数组 board&#xff0c;表示数独棋盘&#xff0c;返回是否有效public boolean isValidSudoku(char[][] board) {// 创建三个二维数组来记录每一行、列和子框中数字的出现次数int[][] rows new int[9][…...

Windows文件系统介绍与基本概念解析

1. 引言 1.1 什么是文件系统 文件系统是一种管理和组织计算机存储设备上文件和文件夹的方法。它提供了文件的创建、读取、写入、删除等操作,并负责文件在存储设备上的存储和访问。 在操作系统中,文件系统是一个重要的组成部分,它使得用户可以方便地使用计算机存储设备来存…...

使用 Apache POI 实现 Java Word 模板占位符替换功能

使用 Apache POI 实现 Java Word 模板占位符替换功能 在日常开发中&#xff0c;我们经常会遇到生成 Word 文档的需求&#xff0c;特别是在需要从模板导出 Word 文件时&#xff0c;比如生成合同、报告等。通过使用模板&#xff0c;开发者可以减少重复的工作&#xff0c;将预定义…...

第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)

目录 大会介绍 基本信息 合作单位 主讲嘉宾 会议组委 征文主题 ​ 参会方式 会议日程 中国-天津 | 2024年10月25-27日 | 会议官网&#xff1a;www.iiip.net 大会介绍 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09;将于202…...

【动手学深度学习】04 数据操作 + 数据预处理(个人向笔记)

数据操作 N维数组是机器学习和神经网络的主要数据结构其中 2-d 矩阵中每一行表示每一行表示一个样本 当维度来到三维的时候则可以表示成一张图片&#xff0c;再加一维就可以变成多张图片&#xff0c;再加一维则可以变成一个视频 访问元素 冒号表示从冒号左边的元素到冒号右…...

本地搭建 Whisper 语音识别模型

Whisper 是由 OpenAI 开发的一款强大的语音识别模型&#xff0c;具有出色的多语言处理能力。搭建和使用 Whisper 模型可以帮助您将音频内容转换为文本&#xff0c;这在语音转写、语音助手、字幕生成等应用中都具有广泛的用途。本指南将对如何在本地环境中搭建 Whisper 语音识别…...

数据集成-缝合一套数据仓库Infra的臆想

一、数据集成当前困境 目前数据集成基础设施建设仅一个单一数据库&#xff0c;无法很好支持上层应用的建设步骤&#xff0c;继续采用当前设施跟随产品的策略&#xff0c;数据产品开发受限巨大&#xff0c;从目前实施的几个产品看&#xff0c;存在以下主要问题&#xff1a; 功能…...

运营有哪几种?

运营又有很多类&#xff0c;分为&#xff1a;内容运营、用户运营、活动运营、产品运营、新媒体运营、社群运营、电商运营、短视频运营 1.内容运营&#xff1a; 做内容提升各类数据&#xff0c;比如内容的数量/浏览数量/互动数传播数等。 适合人群&#xff1a;适合喜欢看文章热…...

Android视频编辑:利用FFmpeg实现高级功能

在移动设备上进行视频编辑的需求日益增长&#xff0c;用户期望能够在智能手机或平板电脑上轻松地编辑视频&#xff0c;以满足社交媒体分享或个人存档的需求。Android平台因其广泛的用户基础和开放的生态系统&#xff0c;成为视频编辑应用的理想选择。FFmpeg&#xff0c;作为一个…...

图片无损缩放PhotoZoom Pro 9.0.2绿色版 +免费赠送PhotoZoom激活优惠代码

PhotoZoom Pro 9.0.2 是一款专业的图片无损缩放软件&#xff0c;该软件采用了 benvista s-spline 独特技术&#xff0c;增强了对图像格式的支持&#xff0c;多处理器支持&#xff0c;GPU 加速&#xff0c;win10和 Photoshop CC 支持。带来一流的数字图形扩展与缩减技术。该软件…...

tekton pipelineresources

PipelineResource 代表着一系列的资源&#xff0c;主要承担作为 Task 的输入或者输出的作用。它有以下几种类型&#xff1a; git&#xff1a;代表一个 git 仓库&#xff0c;包含了需要被构建的源代码。将 git 资源作为 Task 的 Input&#xff0c;会自动 clone 此 git 仓库。pu…...

OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、选择映射&#xff08;SLM&#xff09; 4.2 相位截断星座图&#xff08;PTS&#xff09; 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 mat…...

常见概念 -- 光回波损耗

什么是回波损耗 回波损耗&#xff0c;又称为反射损耗&#xff0c;当高速信号进入或退出光纤的某个部分&#xff08;例如光纤连接器&#xff09;&#xff0c;不连续和阻抗不匹配会引起反射&#xff0c;这就是光纤回波损耗。器件的回波损耗Return Loss(RL)是光信号的输入端口的反…...

uni-app环境搭建

目录 一、下载HBuilder X: 二、创建项目 1、通过HBuliderX创建 2、通过vue-cli命令行创建 三、app真机运行 1、真机运行: 2、打包发行 四、微信小程序调试 1、下载微信小程序开发者工具 2、运行项目&#xff1a;运行---> 运行到小程序模拟器----> 微信开发者工…...

数据结构 栈 队列

系统栈&#xff1a; 保护局部变量 函数的形参和返回值 函数的调用关系&#xff08;保护现场&#xff0c;恢复现场操作&#xff0c;遵循先进后出&#xff0c;后进先出&#xff09; 数据结构栈&#xff08;顺序栈&#xff0c;链式栈&#xff09;&#xff1a; 同样遵遵循先进…...

嵌入式学习路线+嵌入式校招建议 嵌入式学习面试规划

随着物联网、人工智能以及5G等技术的迅猛发展&#xff0c;嵌入式系统的需求逐渐增多。作为毕业生&#xff0c;如何制定一个合理的学习路线&#xff0c;以确保在找工作、参加校招时有足够的竞争力&#xff0c;是非常重要的。我会为你提供一个更加详细、系统的学习路线建议&#…...

服务器深度学习环境配置

学校提供的服务器&#xff0c;参考意见比较低 目录 公有云操作云主机操作系统修改&#xff1a; xshell连接深度学习环境配置显卡驱动检查安装检查 CUDA检查CUDA下载配置环境变量检查 conda 公有云操作 打开控制中心 节点选择 山东-青岛20 打开弹性云主机 云主机 系统已经默认…...

使用 Parallel 类进行多线程编码(下)

2.Parallel.ForEach() 的使用 从 ForEach() 这个名字可以看出该方法是用来遍历泛型集合的&#xff0c;新建一个 ASP.NET Core Web应用的项目&#xff0c;如下&#xff1a; 在 Index.cshtml.cs 文件中增加一个 UserInfo.cs 的类&#xff0c;代码如下&#xff1a; public class U…...

基于微信小程序+Java+SSM+Vue+MySQL的药店管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSSMVueMySQL的药店管理系统【附源码文档…...

C#使用MQTT(一):MQTT服务端

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; 即时通讯协议&#xff0c; 开发商 IBM MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...