首页 > 其他分享 >74_搜索二维矩阵

74_搜索二维矩阵

时间:2024-07-20 15:52:17浏览次数:8  
标签:matrix int 元素 矩阵 二维 74 low target

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;
    }
}

标签:matrix,int,元素,矩阵,二维,74,low,target
From: https://www.cnblogs.com/codingbao/p/18313231

相关文章

  • 矩阵距离——广度优先搜索
    题目描述给定一个N行M列的01矩阵A,A[i][j]与A[k][l]之间的曼哈顿距离定义为:dist(A[i][j],A[k][l])=|i-k|+|j-l|输出一个N行M列的整数矩阵B,其中:B[i][j]=min(1≤x≤N,1≤y≤M,A[x][y]=1)⁡{dist(A[i][j],A[x][y])}即求与每个位置曼哈顿距离最近的1N,M≤1000。输入格式......
  • day 7二维整型数组、字符型数组
    二维整形数组1、二维整形数组的定义:    数据类型数组名[第一维数组的元素个数][第二维数组的元素个数];    数据类型数组名[行数][列数];    例如:inta[2][3];2、数组元素的访问:    数组名[行下标][列下表];    例如:a[0][......
  • day 8字符型二维数组、函数
    字符型二维数组作用:在C语言中字符型二维数组主要用来存放字符串数组1、定义:    数据类型数组名[第一维元素个数][第二维元素个数];例如:charstr[5][32];  2.元素访问:例如:str[0][0];或者  str[0]    3、数组存储的特性:    连续性:数......
  • 基于 CNN(二维卷积Conv2D)+LSTM 实现股票多变量时间序列预测(PyTorch版)
    前言系列专栏:【深度学习:算法项目实战】✨︎涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记忆......
  • 螺旋数字矩阵
    题目描述疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:给出数字个数n(0<n≤999)和行数m(0<m≤999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3,....,n,最终形成一个m行矩阵。小明对这个矩阵有些要求:每行数字的个数一样多列的数量尽可......
  • 从零开始学Java(超详细韩顺平老师笔记梳理)05——数组(语法,赋值机制,拷贝反转)、排序(冒泡排
    文章目录前言一、数组1.基础语法1)介绍2)使用(动态、静态初始化语法与使用)3)注意事项和细节2.数组赋值机制(ArryAssign)3.数组拷贝4.数组反转(reserve)5.数组的扩容与缩减二、排序三、查找四、二维数组(TwoDimensionalArry)1.快速入门2.使用3.案例:打印一个10行的......
  • 数学黑洞6174
    题目描述已知,一个任意的四位整数,将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。即7641-1467=6174。将永远出不来。求证:所有四位数数字(全相同的除外)均能得到6174。输入输出格式输入格式:一个任意的四位整数。输出格式:输出掉进黑洞的......
  • 代码随想录算法训练营第二天| 977 有序数组平方 209 长度最小子数组 59 螺旋矩阵
    977有序数组平方funcsortedSquares(nums[]int)[]int{ //思路,最简单,先平方,再排序 foridx,num:=rangenums{ nums[idx]=num*num } //插排思想,维护两个列表,将无序列表元素插入到有序列表合适位置 fori:=1;i<len(nums);i++{//此处nums[:i]即我们维......
  • 代码随想录算法训练营第42期 第二天 | LeetCode977. 有序数组的平方、209. 长度最小的
    一、977.有序数组的平方学习链接:有序数组的平方状态:暴力解法与双指针都做出来了时间复杂度:暴力解法O()    双指针解法 O()细节之处:暴力解法1       双指针解法1  暴力解法classSolution{publicint[]sortedSquares(int[]nums){......
  • 矩阵向量点积、Batch(批)理解、one-hot编码
    矩阵向量点积output=relu(dot(W,input)+b)input的每个元素为三维的特征向量的特征,W矩阵:行:存储节点权重数组列数表示节点数量所以result[1]和result[0]运算互不干扰,能够并行加速上述数学角度运算代码如下:defnaive_matrix_vector_dot(x,y):assertlen(x.sha......