矩阵算法题

矩阵算法题

    • 1、矩阵置零
    • 2、螺旋矩阵
    • 3、旋转图像
    • 4、搜索二维矩阵

1、矩阵置零

在这里插入图片描述
解题思路:这道题核心是要确定哪些行和哪些列要置零。所以定义两个数组,一个记录要置零的行,一个记录要置零的列。遍历整个矩阵,如果当前位置是0的话,就令l[i]=1,r[j]=1,之后再遍历l数组和r数组,并且对原数组置零。

class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length;int n  = matrix[0].length;int []l = new int[m];int []r = new int[n];//找到要置零的行和列for(int i = 0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]==0){l[i]=1;r[j]=1;}}}//遍历行,确定哪一行要置零for(int i = 0;i<m;i++){if(l[i]==1){for(int j =0;j<n;j++){matrix[i][j]=0;}}}//遍历列,确定哪一列要置零for(int j = 0;j<n;j++){if(r[j]==1){for(int i =0;i<m;i++){matrix[i][j]=0;}}}}
}

2、螺旋矩阵

在这里插入图片描述
解题思路:这道题要确定上下左右的边界值,依次遍历整个矩阵。

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();int m = matrix.length;int n = matrix[0].length;int top = 0,bottom = m-1;int left = 0,right = n-1;while(top<=bottom&&left<=right){//加入上面的一行for(int j = left;j<=right;j++){result.add(matrix[top][j]);}top++;//加入左边的一列for(int i = top;i<=bottom;i++){result.add(matrix[i][right]);}right--;//加入下面的一行if(top<=bottom){for(int j = right;j>=left;j--){result.add(matrix[bottom][j]);}bottom--;}//加入左边的一列if(left<=right){for(int i = bottom;i>=top;i--){result.add(matrix[i][left]);}left++;}}return result;}
}

3、旋转图像

在这里插入图片描述
解题思路:先将一行存储到一个数组中去,依次遍历整个矩阵,左列最后两个到上行的左边两个,下列的最后两个到左列的最后两个,右列的上面两个到下列的右边两个,上列存储的到右列的上面两个。

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;int left = 0;int right = n - 1;int top = 0;int bottom = n - 1;// 每一圈旋转while (left < right && top < bottom) {int len = right - left;int[] tmp = new int[len];  // 保存当前层顶部行(不含最后一个元素)// 1. 保存 top 行的前 len 个元素(右上角那个位置留给最后赋值)for (int j = 0; j < len; j++) {tmp[j] = matrix[top][left + j];}// 2. 左列 → 上行for (int i = 0; i < len; i++) {matrix[top][left + i] = matrix[bottom - i][left];}// 3. 下行 → 左列for (int j = 0; j < len; j++) {matrix[bottom - j][left] = matrix[bottom][right - j];}// 4. 右列 → 下行for (int i = 0; i < len; i++) {matrix[bottom][right - i] = matrix[top + i][right];}// 5. tmp(原 top 行) → 右列for (int j = 0; j < len; j++) {matrix[top + j][right] = tmp[j];}// 收缩一圈left++;right--;top++;bottom--;}}
}

4、搜索二维矩阵

在这里插入图片描述
解题思路:从右上角开始判断,如果target小于这个数,就往左移,如果target大于这个数就往下移。因为最右上角是这一行的最大值,也是这一列的最小值。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;int top = 0;int right = n-1;while(top<m&&right>=0){if(target>matrix[top][right]){top++;}else if(target<matrix[top][right]){right--;}else{return true;}}return false;}
}

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

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

相关文章

Spring底层(二)Spring IOC容器加载流程原理

一、怎么理解SpringIoc IOC&#xff1a;Inversion Of Control&#xff0c;即控制反转&#xff0c;是一种设计思想。之前对象又程序员自己new自己创建&#xff0c;现在Spring注入给我们&#xff0c;这样的创建权力被反转了。 所谓控制就是对象的创建、初始化、销毁。 创建对象…

UDP中的单播,多播,广播

文章目录UDP 简单回顾一、单播&#xff08;Unicast&#xff09;定义特点应用举例二、广播&#xff08;Broadcast&#xff09;定义特点应用三、多播&#xff08;Multicast&#xff09;定义特点应用UDP 单播、广播、多播的对比总结额外说明代码简要示例&#xff08;C&#xff09;…

数据库练习3

一、建立product表&#xff0c;操作方式operate表要求&#xff1a;1.定义触发器实现在产品表(product)中每多一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。注&#xff1a;操作说明&#xff1a;标记执行delete 、insert、 update2.定义触发器实现在产品表(pr…

pycharm和anaconda安装,并配置python虚拟环境

1、pycharm和anaconda安装 PyCharm与Anaconda超详细安装配置教程_anaconda pycharm安装-CSDN博客https://blog.csdn.net/qq_32892383/article/details/116137730 2、pycharm汉化 PyCharm汉化&#xff1a;简单两步搞定&#xff01;PyCharm怎么设置中文简体&#xff0c;为什么…

EP04:【Python 第一弹】函数编程

一、定义 函数指将一组语句的集合通过一个变量名封装起来&#xff0c;调用这个函数变量名&#xff0c;就可以执行函数。 二、特点 减少重复逻辑代码的编写将程序中的逻辑可以进行扩展维护项目程序的代码更简单 三、创建 def 函数名():逻辑代码1逻辑代码2return 结果 函数名…

linux安装Mysql后添加mysql的用户和密码

在 MySQL 中创建用户并设置密码的完整指南如下&#xff1a; 方法 1&#xff1a;使用 CREATE USER 语句&#xff08;推荐&#xff09; -- 创建新用户并设置密码 CREATE USER newuserlocalhost IDENTIFIED BY your_password;-- 授予权限&#xff08;示例&#xff1a;授予所有数据…

React hooks——memo

一、简介React.memo 是 React 提供的一个高阶组件&#xff08;Higher-Order Component&#xff09;&#xff0c;用于优化函数组件的渲染性能&#xff0c;它通过浅比较&#xff08;shallow compare&#xff09;props 的变化来决定是否重新渲染组件。1.1 基本用法const MyCompone…

leetcode15.三数之和题解:逻辑清晰带你分析

介绍 题源 分析 1.双指针固定一个数 首先明白一点&#xff0c;我们有三个数&#xff0c;我们想使用双指针&#xff0c;那就必须固定一个数。 2.二分 本题还涉及二分&#xff0c;双指针经常和二分结合使用&#xff08;二分本质就是双指针&#xff0c;仔细思考这思考这句话&…

exports使用 package.json字段控制如何访问你的 npm 包

目录 想象一下你正在开发一个 npm 包…… 术语 什么是exports领域&#xff1f; exports好处 保护内部文件 多格式包 将子路径映射到dist目录 子路径导出 单一入口点 多个入口点 公开软件包文件的子集 有条件出口 设置使用条件 默认条件 句法 针对 Node.js 和浏…

AngularJS 安装使用教程

一、AngularJS 简介 AngularJS 是 Google 开发的一款前端 JavaScript 框架&#xff0c;采用 MVVM 架构&#xff0c;提供了数据双向绑定、依赖注入、模块化、路由管理等强大功能&#xff0c;适合构建单页面应用&#xff08;SPA&#xff09;。注意&#xff1a;AngularJS&#xf…

基于python和neo4j构建知识图谱医药问答系统

一、pyahocorasick1.安装 pyahocorasick 包&#xff1a; pip install pyahocorasick -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install pyahocorasick &#xff1a;安装名为 pyahocorasick 的第三方库&#x1f449; 这个库是一个 Aho-Corasick 多模匹配算法 的 Python…

片上网络(NoC)拓扑结构比较

1. 拓扑结构拓扑结构延迟吞吐量跳数功耗面积开销可扩展性容错性布线复杂度适合通信模式Mesh&#xff08;网格&#xff09;低&#xff08;O(√N)&#xff09;高&#xff08;多路径并行&#xff09;O(√N)中高&#xff08;路由器多&#xff09;中高&#xff08;规则布线&#xff…

git merge 命令有什么作用?具体如何使用?

回答重点git merge 命令主要用于将两个分支的历史和内容合并在一起。简而言之&#xff0c;它会将一个分支的更改引入到当前分支中。常见的使用场景是将功能分支&#xff08;feature branch&#xff09;的修改合并回主分支&#xff08;main branch&#xff09;或者开发分支&…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - jieba库分词简介及使用

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解 jieba库分词简介及使用 视频在线地址&…

大模型的后训练与逻辑能力

《DeepSeek原生应用与智能体开发实践》【摘要 书评 试读】- 京东图书 在人工智能与机器学习领域&#xff0c;模型的后训练阶段不仅是技术流程中的关键环节&#xff0c;更是提升模型性能&#xff0c;尤其是数学逻辑能力的“黄金时期”。这一阶段&#xff0c;通过对已初步训练好…

pycharm安装教程-PyCharm2025安装步骤【MAC版】附带安装包

pycharm安装教程-PyCharm2025安装详细步骤【MAC版】安装安装包获取&#xff08;文章末尾&#xff09;今天来给大家分享 Mac 系统安装 PyCharm&#xff0c;附带安装包资源安装&#xff0c; PyCharm 相关就不叙述了&#xff0c;直接开始安装&#xff01; 安装 2024版本、2025年…

【React Native】路由跳转

Link 跳转的路径&#xff0c;就在href里写/details。路径都是相对于app目录来写的&#xff0c;也就是说app目录就是/。很多时候&#xff0c;需要跳转的组件比较复杂。比方说&#xff0c;要在里面要嵌套按钮&#xff0c;或者其他东西。这种情况下&#xff0c;就可以在Link组件里…

使用 Spring Boot + AbstractRoutingDataSource 实现动态切换数据源

1. 动态切换数据源的原理AbstractRoutingDataSource 是 Spring 提供的一个抽象类&#xff0c;它通过实现 determineCurrentLookupKey 方法&#xff0c;根据上下文信息决定当前使用的数据源。核心流程如下&#xff1a;定义多数据源配置&#xff1a;注册多个数据源。实现动态数据…

Kubernetes (K8S)知识详解

Kubernetes (K8S) 是什么&#xff1f; Kubernetes 是 Google 在 2014 年开源的生产级别的容器编排技术&#xff08;编排也可以简单理解为调度、管理&#xff09;&#xff0c;用于容器化应用的自动化部署、扩展和管理。它的前身是 Google 内部的 Borg 项目&#xff0c;Borg 是 …

在github上传python项目,然后在另外一台电脑下载下来后如何保障成功运行

如何在 GitHub 上传并在另一台电脑成功运行 Python 项目✅ 一、上传前&#xff08;本地准备&#xff09; 在你的项目文件夹中进行以下准备&#xff1a; 1. 确保结构清晰 my_project/ ├── main.py ├── utils.py ├── config.yaml ├── requirements.txt └── README…