【每日一题】74. 搜索二维矩阵

2023-09-21 22:03:27

74. 搜索二维矩阵 - 力扣(LeetCode)

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

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

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

示例 1:

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

示例 2:

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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -104 <= matrix[i][j], target <= 104
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int matrixSize = matrix.length;
        int matrixColSize = matrix[0].length;
        int len = matrixSize * matrixColSize;
        int right = len - 1;
        int left = 0;
        int mid = 0;
        int row ,col;
        while(left < right) {
            mid = (left+right) / 2;
            row = mid/matrixColSize;
            col = mid%matrixColSize;
            if(matrix[row][col] <= target)  left = mid+1;
            else if(matrix[row][col] > target) right = mid;
        }
        System.out.println(left);
        System.out.println(matrixColSize);
        row = left/matrixColSize;
        col = left%matrixColSize;
        if(matrix[row][col] == target) return true;
        left-=1;
        row = left/matrixColSize;
        col = left%matrixColSize;
        if(left >= 0)
        if(matrix[row][col] == target) return true;
        return false;
    }
}

   

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int matrixSize = matrix.length;
        int matrixColSize = matrix[0].length;
        int row = matrixSize-1;
        while(row >= 0 && matrix[row][0] > target) row-=1;
        if(row < 0 ) return false;
        int left = 0;
        int right = matrixColSize - 1;
        while(left < right) {
            int mid = (left+right) / 2;
            if(matrix[row][mid] > target) right = mid;
            else if(matrix[row][mid] <= target) left = mid+1;
        }
        System.out.println(left);
        System.out.println(row);
        if(matrix[row][left]==target || (left - 1 >= 0&&matrix[row][left-1]==target)) return true; 
        return false;
    }
}

        每日一题,今天是中等题。也是和二分有关。

        这是一道矩阵搜索的题目。从左到右,从上到下是递增的,又是搜索数,所以很快能够想到二分查找。

        那就是怎么二分查找的问题而已了。这里博主给出两种方法。

       第一种:把整个矩阵当作一个大数组,len = row*col。而二维矩阵的列和行地址无非就是除col和模col就可以得到了,那其他地方就当作正常的二分查找就可以了,具体的代码就是第一种方案。

        第二种:由于整个矩阵是递增的,也就是说,最左边的一定是最小的,那只要去比较最左边的数和target的值就可以了,找到最左边数小于target的那一行,那么target要么在那一行,要么就bu'jian

更多推荐

基于Qt4开发曲线绘制交互软件Plotter

目前市面上有很多曲线绘制软件,但其交互功能较差。比如,想要实现数据的交互,同步联动等,都需要大量繁琐的人工操作。所以讲想开发一款轻量级的曲线绘制交互软件。下面就以此为案例,记录一下基于Qt4的开发过程。目录1需求2技术路线3开发流程1框架搭建2菜单3数据改动和右键菜单4阶段性测试5多条曲线问题6颜色和风格设置7绘图的清

如何将Docker与Kubernetes集成,实现云原生应用程序

文章目录1.容器化应用程序2.将镜像推送到容器仓库3.部署到Kubernetes4.应用程序扩展和管理DockerSwarmvs.Kubernetes:容器编排的比较1.配置和学习曲线2.功能和生态系统3.扩展性和容错性4.社区和支持🎈个人主页:程序员小侯🎐CSDN新晋作者🎉欢迎👍点赞✍评论⭐收藏✨收录专栏:云

SEO方案尝试--Nuxtjs项目基础配置

Nuxtjs最新版Nuxt3项目配置安装nuxtjs最新版Nuxt3参考官网安装安装插件安装ElementPlus页面怎么跳转,路由怎么实现404页面该怎么配置配置网页的title安装nuxtjs最新版Nuxt3参考官网安装安装插件安装ElementPlus安装ElementPlus和图标库#首先,使用以下命令安装El

Mybatis学习笔记11 缓存相关

Mybatis学习笔记10高级映射及延迟加载_biubiubiu0706的博客-CSDN博客缓存:cache缓存的作用:通过减少IO的方式,来提高程序的执行效率Mybatis的缓存:将select语句的查询结果放到缓存(内存)当中,下一次还是这条select语句的话,直接从缓存中取,不再查数据库.一方面是减少了IO.另

8、Spring之循环依赖底层源码解析

什么是循环依赖?很简单,就是A对象依赖了B对象,B对象依赖了A对象。//A依赖了BclassA{publicBb;}//B依赖了AclassB{publicAa;}那么循环依赖是个问题吗?如果不考虑Spring,循环依赖并不是问题,因为对象之间相互依赖是很正常的事情。比如Aa=newA();Bb=newB();a.b=

Git 代理(Proxy) 配置

某些情况下,我们需要通过代理才能访问特定网络环境下的git资源,git支持代理配置,支持http(s),SOCKS4/SOCKS5.HTTP(S)HTTP代理配置格式如下:gitconfig--globalhttp.proxyhttp://[proxy]:[port]实际环境下,其实我们大多数情况下,并不需要全部git

软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1

目录项目总览开发准备开发步骤角色分工软件环境项目介绍产品原型技术选型开发环境搭建前端:默认已有后端使用Git版本控制数据库环境搭建前后端联调​登录功能完善导入接口文档使用swagger​和yapi的区别常用注解项目总览开发准备开发步骤角色分工软件环境项目介绍产品原型展示产品的简单框架,方便后端开发人员理解业务流程,和相

Vue 使用vue-cli构建SPA项目(超详细)

目录一、什么是vue-cli二,构建SPA项目三、运行SPA项目前言:在我们搭建SPA项目时候,我们必须去检查我们是否搭建好NodeJS环境cmd窗口输入以下指令:去检查node-vnpm-v一、什么是vue-cliVueCLI(VueCommandLineInterface)是一个官方提供的用于快速搭建Vue.js项

普通卷积、转置卷积详细介绍以及用法

转置卷积(普通卷积、转置卷积详细介绍以及用法1、普通卷积操作2、转置卷积2.1Pytorch转置卷积实验1、普通卷积操作首先回顾下普通卷积,下图以stride=1,padding=0,kernel_size=3为例,假设输入特征图大小是4x4的(假设输入输出都是单通道),通过卷积后得到的特征图大小为2x2。一般使用卷积

elementui表单的验证问题

elementui表单的验证问题elementui是基于vue的一个ui框架,用起来还是挺不错的,但是有时候还是会遇到一些摸不着头脑的情况。​我在打开一个新增数据的对话框的时候出现了一个问题,明明是新增,但是一打开就出现了错误提示,这肯定是不对的,用户体验也是极其不好的。到底是什么原因导致的呢?​经过我的检查,发现主要

【leetcode】 数组二分查找

【leetcode】数组二分查找1.二分查找二分查找(BinarySearch),也称为折半查找,是一种在有序数组中查找特定元素的高效算法。它的基本思想是不断将待查找区间缩小一半,直到找到目标元素或确定目标元素不在数组中为止。这种查找方法比线性查找效率高,因为它可以快速排除掉大部分不可能包含目标元素的区间,从而减少了比

热文推荐