问题1:矩阵置零 问题2:搜索二维矩阵

news2024/12/25 23:57:07

问题1:矩阵置零

给定一个 *m* x *n* 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法

 解题思路:

1.先遍历一遍矩阵,将元素为0的行和列都标记为true
2.再遍历一遍矩阵,将标记为true的行和列的元素都置为0

源代码如下:

class Solution {
public:
    
    void setZeroes(vector<vector<int>>& matrix) {
        int m=matrix.size();
        int n=matrix[0].size();
        vector<bool> row(m),col(n);//定义行和列的标记,类型为bool类型
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                //遍历矩阵,发现元素为0,则将该元素所在的行和列标记为true
                if(matrix[i][j]==0)
                {
                    row[i]=col[j]=true;
                }
            }
        }
        //将所有标记为true的元素置为0
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(row[i]||col[j])
                {
                    matrix[i][j]=0;
                }
            }
        }
    }
};

问题2:搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true 

解题思路:

方法一:暴力法

1.因为每一行的元素和每一列的元素都是递增的,且当前行的末尾元素小于下一行的起始元素,所以我们从右上角开始找
2.当前元素<target,往下找
3.当前元素>target,往左找
4.当前元素=target,返回true
5.若while循环结束并跳出,说明没找到,则返回false 

源代码如下:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m=matrix.size();
        int n=matrix[0].size();
        int i=0,j=n-1;//从右上角元素开始找
        while(i<m&&j>=0)
        {
            if(matrix[i][j]<target)
            {
                i++;
            }
            else if(matrix[i][j]>target)
            {
                j--;
            }
            else
            {
                return true;
            }
        }
        return false;
    }
};

方法二:二分查找法

1.将矩阵看作是一组升序排序的数组
2.通过二分查找,找到目标值
3.将矩阵的下标转换为数组下标即可

源代码如下:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m=matrix.size();
        int n=matrix[0].size(); 
        int left=0;//左边界为0
        int right=m*n-1;//右边界的下标为元素总个数-1
        while(left<=right)
        {
            int mid=(right+left)/2;
            int x=matrix[mid/n][mid%n];//将数组下标和矩阵的下标进行转换
            if(x<target)
            {
                left=mid+1;
            }
            else if(x>target)
            {
                right=mid-1;
            }
            else
            {
                return true;
            }
        }
        return false;
    }
};

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

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

相关文章

Element 实现动态增加多个输入框并校验

文章目录 前言实现通过按钮动态增加表单并验证必填实现动态多个输入框为行内模式&#xff0c;其它为行外模式 前言 在做复杂的动态表单&#xff0c;实现业务动态变动&#xff0c;比如有一条需要动态添加的el-form-item中包含了多个输入框&#xff0c;并实现表单验证&#xff0…

Visual Studio Code 如何设置整体界面字体的大小?

在某次操作中&#xff0c;我不小心误点了什么&#xff0c;导致 Visual Studio Code 界面的字体变小了很小&#xff0c;如下图所示&#xff1a; 我想把字体调整回来&#xff0c;该如何操作呢&#xff1f; 首先&#xff0c;第一步&#xff0c;打开设置&#xff1a; 第二步&#…

MiniLED是什么?有怎样的发展前景

Mini LED又叫做“次毫米发光二极管”&#xff0c;也是LED器件的一种&#xff0c;其芯片尺寸介于50~200μm之间。Mini LED的组成包括Mini LED像素阵列以及驱动电路&#xff0c;而且像素中心间距的单元较小&#xff0c;仅为0.3-1.5mm单元。随着 Mini LED 显示技术的快速发展&…

Nginx+Tomcat负载均衡(反向代理)、动静分离集群

NginxTomcat负载均衡、动静分离 一、正向代理与反向代理二、负载均衡--with-stream #启用 stream模块&#xff0c;提供4层调度 一、正向代理与反向代理 Nginx:正向代理&#xff08;知道目标服务器&#xff09; 反向代理&#xff08;不知道目标服务器&#xff09; Nginx配置反…

QWebEngine应用---执行javascript

我们都知道现代前端技术是基于html、css和javascript进行显示交互的&#xff0c;其中html和css属于静态界面显示&#xff0c;辅以javascript使页面交互更丰富。浏览器作为前端页面显示的基石&#xff0c;提供一套显示、交互、调试的东西。QWebEngine同样也提供了这些功能&#…

CodeTop整理-数组篇

目录 53. 最大子序和 33. 搜索旋转排序数组 三数之和 121. 买卖股票的最佳时机 4. 寻找两个正序数组的中位数 695. 岛屿的最大面积 54. 螺旋矩阵 88. 合并两个有序数组 152. 乘积最大子数组 42. 接雨水 64. 最小路径和 1. 两数之和 123. 买卖股票的最佳时机 III …

IDEA完全免费AI辅助编程插件BITO-GPT4安装及中文国产化设置

打开IDEA的plugins 搜索BITO&#xff1a; 下载后右边工具栏上会出现BITO的小蓝标&#xff0c;这样就可以使用了但是里面是全英文的 设置中文 1.打开BITO点击右上角设置 点击里面的Settings 进入BITO的Web网页 右边这个改成中文&#xff1a; 这样回到IDEA AI就会生成中…

【HTML】使用 div 自定义实现 input、textarea 输入框(适合定制化场景)

文章目录 一、实现 Input 组件二、实现 Textarea 组件三、React 实践案例 API参考文档: contenteditable : https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/contenteditableresize &#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/resiz…

【Linux】shell脚本: 基本语法 和 高级特性

Shell脚本是一种用Shell语言编写的程序&#xff0c;它可以实现自动化的任务&#xff0c;如批量处理文件、监控系统状态、定时备份等。本文包括&#xff1a; Shell脚本的定义和作用&#xff1a;介绍什么是Shell脚本&#xff0c;它有哪些优点和缺点&#xff0c;它可以用来做什么。…

【macOS 系列】如何在mac下安装nvm实现多版本nodejs

文章目录 一、安装 nvm二、提示 commond not found:nvm的问题 一、安装 nvm 注意&#xff1a;mac下用nvm。win下用nvm-windows 以下步骤都是在命令行工具下执行&#xff1a; 1、安装 curl -o- [https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh](https://…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试

下载镜像 CentOS 2 3 4 5 6 等历史老版本下载地址 国内镜像地址_hkNaruto的博客-CSDN博客 下载CentOS 5.0 1-7 ISO文件 注意&#xff1a;尝试过下载DVD版本&#xff0c;速度太慢了。还是通过国内镜像下载这几个iso快。 安装虚拟机 VirtualBox 挂载第一个iso&#xff0c;启动…

计算机基础--->数据结构(7)【红黑树】

文章目录 二三树二三树的性质二三树一个简单的插入例子二三树的特点 红黑树红黑树的特点红黑树的节点红黑树的插入操作1. 左旋2. 右旋颜色翻转3. 颜色翻转插入实例 二三树 二三树与红黑树的性质非常相似&#xff0c;但是二三树能更直观的让人理解构建过程 二三树的性质 二三树是…

【机器学习核心总结】什么是GBDT(梯度提升树)

什么是GBDT(梯度提升树) 虽然GBDT同样由许多决策树组成&#xff0c;但它与随机森林由许多不同。 其中之一是GBDT中的树都是回归树&#xff0c;树有分类有回归&#xff0c;区分它们的方法很简单。将苹果单纯分为好与坏的是分类树&#xff0c;如果能为苹果的好坏程度打个分&…

云原生(第四篇)-k8s yaml文件

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式&#xff1a; ●大小写敏…

CentOS Linux的替代品(六)_BigCloud Enterprise Linux R8 U2 基础安装教程

文章目录 CentOS Linux的替代品&#xff08;六&#xff09;_BigCloud Enterprise Linux R8 U2 基础安装教程一、BC-Linux简介二、BigCloud Enterprise Linux R8 U2 基础安装2.1 下载地址2.2 安装过程 三、简单使用3.1 关闭selinux3.1.1 临时关闭selinux3.1.2 永久关闭selinux 3…

vscode 创建js 项目

1 创建 新窗口 2 进入文件夹 3 创建新的文件夹 4 选择 创建的文件夹 后 5 创建 js 文件 6 ctrl shift p 输入task 7 测试 8 F5 运行 选择调试器

打造品牌影响力:媒介易引领邀请明星录制祝福视频新潮流

在当今品牌推广的竞争激烈市场中&#xff0c;与体育冠军合作代言已成为众多品牌争相追求的新形式。体育冠军以其卓越的成就和广泛的影响力&#xff0c;成为品牌推广中的瞩目焦点。他们的形象和声音能够深入人心&#xff0c;激发消费者的共鸣&#xff0c;并对品牌产生积极的影响…

Mysql 幻读,当前读和快照读

什么是幻读 幻读指当用户读取某一范围的数据行时&#xff0c;另一个事务又在该范围内插入了新行&#xff0c;当用户在读取该范围的数据行时&#xff0c;会发现有新增行数据&#xff1b; mysql 在RR(可重复读)隔离级别利用间隙锁机制下一定程度上解决了幻读。 这里的一定程度…

Echarts 柱状图 设置柱状图渐变,设置柱状图圆角(弧度)

Echarts 柱状图 设置柱状图渐变&#xff0c;设置柱状图圆角&#xff08;弧度&#xff09; 1. 效果截图 2. 配置项截图 3. 具体代码 import * as echarts from echarts// 项目组织项目数 const territoryOptions {key: territory,title: {text: 项目数,textStyle: {fontSize:…

数据库死锁:原因和解决办法

理解数据库中的死锁 在数据库的上下文中&#xff0c;死锁是指两个或多个事务无法进行的情况&#xff0c;因为每个事务都在等待另一个事务释放资源。这可以类比为事务的循环链&#xff0c;每个事务都在等待链中的下一个事务释放资源。以下是一个死锁场景的视觉表示&#xff1a;…