首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

74_搜索二维矩阵

编程知识
2024年07月20日 14:49

74、搜索二维矩阵

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

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false

示例 1:

img

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

示例 2:

img

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

【思路】

由于每行的第一个元素大于前一行的最后一个元素,且每行元素是升序的,所以每行的第一个元素大于前一行的第一个元素,因此矩阵第一列的元素是升序的。可以对矩阵的第一列的元素二分查找,找到最后一个不大于目标值的元素,然后在该元素所在行中二分查找目标值是否存在。

//非二分查找法
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int i = 0;
        for (i = matrix.length - 1; i > 0 ; i--) {
            if (matrix[i][0] <= target) {
                break;
            }
        }
        for (int j = 0; j < matrix[i].length; j++) {
            if (matrix[i][j] == target) 
                return true;
        }
        return false;
    }
}

//改为二分查找的方式来做

class Solution {
	public boolean searchMatrix(int[][] matrix, int target) {
		int rowIndex = binarySearchFirstColumn(matrix, target);
		if (rowIndex < 0) {
			return false;
		}
		return binarySearchRow(matrix[rowIndex], target);
	}
    public int binarySearchFirstColumn(int[][] matrix, int target) {
        int low = -1, high = matrix.length - 1;
        while (low < high) {
            int mid = (high - low + 1) / 2 + low;
            if (matrix[mid][0] <= target) {
                low = mid;
            } else {
                high = mid - 1;
            }
        }
        return low;
    }
    
    public boolean binarySearchRow(int[] row, int target) {
        int low = 0, high = row.length - 1;
        while (low <= high) {
            int mid = (high - low) / 2 + low;
            //用原来的也可以
            //int mid = (high + low) / 2;
            if (row[mid] == target) {
                return true;
            } else if (row[mid] > target) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        return false;
    }
}
From:https://www.cnblogs.com/codingbao/p/18313231
本文地址: http://shuzixingkong.net/article/221
0评论
提交 加载更多评论
其他文章 Known框架实战演练——进销存系统需求
概述 该项目是一个开源、简易、轻量级的进销存管理系统,作为Known框架的实战演练项目。 项目代码:JxcLite 开源地址: https://gitee.com/known/JxcLite 功能模块 1. 基础数据 1.1 数据字典 框架内置模块,该模块用于维护系统下拉选项的数据,如商品类别、计量
Python按条件筛选、剔除表格数据并绘制剔除前后的直方图
本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围的所有行,再用其他几列数据的数值,加以数据筛选与剔除;同时,对筛选前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法~
Python按条件筛选、剔除表格数据并绘制剔除前后的直方图 Python按条件筛选、剔除表格数据并绘制剔除前后的直方图
[rCore学习笔记 016]实现应用程序
写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 设计方法 了解了特权级机制,实际上如果要设计一个应用程序就需要保证它符合U模式的要求,不要去访问S模式下的
[rCore学习笔记 016]实现应用程序
一种优秀的虚拟机内存架构 - AQ
源链接:https://www.axa6.com/zh/an-excellent-virtual-machine-memory-architecture 简介 虚拟机内存架构直接影响虚拟机的性能和占用。设计一个优秀的架构可以有效提升性能和效率。 本文将介绍AQ虚拟机使用的内存架构,以及AQ虚拟机内存
Redis主从配置
转载请注明出处: Redis主从配置的特点 数据同步:主库(Master)负责处理写请求,并将数据更改同步到从库(Slave)。从库主要用于读请求和数据备份。 读写分离:通过配置从库为只读,可以有效分散读请求,提升系统性能。 高可用性和容错:即使主库出现故障,从库也能继续提供读服务,并在主库恢复后重
Redis主从配置 Redis主从配置 Redis主从配置
Linux安装 JDK (CentOS 7)
Linux安装 JDK 一、Linux安装软件的方式 第一种:二进制发布包安装: 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 第二种: rpm安装 : 软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题 第三种:yum安装 : 一种在线软件安装
Linux安装 JDK (CentOS  7) Linux安装 JDK (CentOS  7) Linux安装 JDK (CentOS  7)
lvs的nat和dr模式混合用
机器部署信息 lvs : 10.0.0.200 vip 10.0.0.19 外网IP , 172.168.1.19 内网IP dr rs: 10.0.0.200 vip 10.0.0.18 rip nat rs: 172.168.1.17 rip 客户端: 10.0.0.14 cip lvs机器:
lvs的nat和dr模式混合用
ComfyUI进阶:Comfyroll插件 (五)
ComfyUI进阶:Comfyroll插件 (五)前言:学习ComfyUI是一场持久战,而Comfyroll 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业的图像生成与编辑工具。借助这些节点,用户可以在静态图像的精细调整和动态动画的复杂构建方面进行深入探索。C
ComfyUI进阶:Comfyroll插件 (五) ComfyUI进阶:Comfyroll插件 (五) ComfyUI进阶:Comfyroll插件 (五)