Search a 2D Matrix 在有序二维矩阵查找数 @LeetCode

在一个m*n的矩阵之中查找某个数字 在一个m*n的矩阵之中查找某个数字 描述:在一个m*n的二维数组中,所有元素从左到右递增、从上到下递增,现给定一个数字,查询该数组中是否含有这个数字。 例如:现有矩阵matrix如下: [ [1,2,3], [4,5,6], [7,8,9] ] 给定target=5,返回true 给定target=10,返回false 解法一: 没有系统的深入学习过算法,也没有大量的刷题,在排除暴力的遍历后,我所... 阅读详情

经典面试题,从右上角开始查找O(m+n),可以不用二分法

package Level3;

/**
 * Search a 2D Matrix 
 * 
 *Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,

Consider the following matrix:

[
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]
Given target = 3, return true.
 *
 */
public class S74 {

	public static void main(String[] args) {

	}
	
	public boolean searchMatrix(int[][] matrix, int target) {
		
		// 取右上角的进行最初比较
		int x = 0, y = matrix[0].length-1;
		
		// 限定范围
		while(x>=0 && x<matrix.length && y>=0 && y<matrix[0].length){
			if(matrix[x][y] == target){
				return true;
			}
			
			// 要查找的比当前位置的值要大,则不必再在这一行中查找
			if(target > matrix[x][y]){
				x++;
			}else if(target < matrix[x][y]){		// 不必在这一列中查找
				y--;
			}
		}
		return false;
    }

}


Second try:

发现二分法的方法:

http://n00tc0d3r.blogspot.com/2013/05/search-2d-matrix.html

Another way to solve the problem is to think of the 2D matrix as a sorted 1D array and then apply the regular binary search on the 1D array. After computing the mid value, we calculate the corresponding row and column numbers based on mid.

public static boolean searchMatrix2(int[][] matrix, int target) {  
		   // treat the 2D matrix as a sorted 1D array and use binary search to find the target  
		   int low = 0, high = matrix.length * matrix[0].length - 1;  
		   while (low <= high) {  
		     int mid = (low + high) / 2;  
		     int row = mid / matrix[0].length, col = mid % matrix[0].length;  
		     if (target == matrix[row][col]) return true;  
		     else if (target < matrix[row][col]) high = mid - 1;  
		     else low = mid + 1;  
		   }  
		   
		   return false;  
	} 




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



C++版 - 剑指offer 面试题3:二维数组(矩阵)中数的查找(leetcode 74. Search a 2D Matrix) 题解 剑指offer 面试题 二维数组中的查找 提交网址: http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154 参与人数:11920   时间限制:1秒   空间限制:32768K 本题知识点:查找 题目描述 在一个二维数组中,每一行都按照从 阅读详情

相关推荐

一文带你弄懂thermal governor IPA

当current temp < target temp时,使用k_pu,当current temp >= target temp时,使用k_po。如果current_temperature = switch_on_temp时,则k_p = k_pu,这时Pmax。如果current_temperature = target_temp时,则k_p = k_po,这时Pmax。2、解析dts,获得switch_on_temp和target_temp。3、初始化k_pu/k_po/k_i/k_d的常数。

yxw0609131056的博客 1245

有/无重复二分查找,矩阵查找,有序数组中位数,接雨水算法

《算法分析与设计》实验报告 一、实验目的及要求 1、二分查找问题:在一个无重复的有序整数数组中查找某个数的位置,如果找到则返回下标,否则返回-1。 2、 有重复的二分查找:在一个可重复的升序的整数数组中查找某个数的开始位置和结束位置。 如果数组中不存在,则返回 [-1, -1]。 算法时间复杂度要求为 O(log n) 。 示例1: 输入:nums = [5,7,7,8,8,10] target = 8 输出:[3,4] 示例2: 输入:nums = [5,7,7,8,8,10] target = 6 输出

Pistachiout的学习博客 1007

【医学影像】Deep Learning for Automatic Pneumonia Detection

写在前面的话: 这篇论文是北美放射学会(RSNA)在Kaggle平台上托管的肺炎区域检测挑战赛取得第二名成绩的解决方案。因为笔者需要用到其中的图像增强方案,因此本篇博客只介绍了数据集和图像增强,关于模型的改进和其它改进点没有涉及。 论文地址:https://arxiv.org/abs/2005.13899 代码地址:https://github.com/tatigabru/kaggle-rsna 比赛地址:https://www.kaggle.com/c/rsna-pneumonia-detection-c

chenzhoujian_的博客 1567

给定一个m行n列有序矩阵,查找数k的最优算法的最坏情况复杂度?

下面是最优算法: 记矩阵的右上角(左下角也可以)元素为a,搜索起点设置为a,要查找的元素为k:若a&gt;k,则a所在列的所有元素均大于k,搜索位置左移1位,然后删除该列构成新的矩阵;若a&lt;k,则a所在行的所有元素均小于k,搜索位置下移1位,然后删除该行构成新的矩阵;若相等,结束查找;由新构成的矩阵利用上述方式继续查找(递归调用)。 该最优算法的最坏情况也就是说从右上角开始搜索直到左下角结束...

疯狂的1024 3019

华为HCIP-001:PPPOE配置模拟实验

华为HCIP01:PPPOE配置模拟实验 实验环境 pppoe-client上面的接口信息 [AR1]dis ip interface brief *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 1 Th

兔子乖乖 1798

NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案(附详细排查流程)

本文深入探讨了NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案,包括快速临时修复、标准系统配置和PAM模块根治方案。详细分析了错误原因,提供了完整的排查流程和性能优化建议,帮助开发者高效解决RDMA网络环境下的内存锁定问题。

nut55的博客 625

牛客网 | 有序矩阵查找练习题

现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。 给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3,3,10 返回:false 从右上角的坐标开始匹配,

weizaishouex2010的专栏 601

copilot基于 DeepSeek-R1 思路构建 VLA 自动驾驶强化学习系统

下面给出一个完整示例代码,结合 DeepSeek‑R1 的技术方法,实现一个端到端的 VLA(视觉+语言行动)自动驾驶深度强化学习系统。.2f。

ywfwyht的博客 775

数据结构与算法分析笔记与总结(java实现)--排序11:有序矩阵查找练习题

数据结构与算法分析笔记与总结(java实现)--排序11:有序矩阵查找练习题

小菜鸟也想飞的博客 537

生成EtherCAT从站XML图片信息方法

详细介绍了EtherCAT从站XML文件中图片元素的生成方法。

kevin1499的博客 2129

2026年国赛C题微网与外部电网电力调控策略 (三):问题三、问题四滚动预测、实时电价与结果核验

专栏内定期更新ABCDE五题详细思路、代码(含运行结果图)和讲解视频-(11号之前半价):问题三看起来只是多给了一个光伏预报附件,实质上它改变了整道题的信息结构:问题四则是在问题二、问题三之上替换价格来源。问题4-2相当于“确定性计划+实时电价”,问题4-3相当于“滚动预测+实时电价”。物理模型完全不变,改变的是价格序列和费用口径。本文先给出核心结果:从结果看,问题3比问题2多约164.21万元,问题4-3比问题4-2多约168.79万元。主要增量不是“储能没有工作”,而是预测误差、计划偏差和紧急购电造成的

YOLO 343

【LeetCode & 剑指offer刷题】矩阵题1:4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列)...

【LeetCode &amp; 剑指offer刷题】矩阵题1:4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列) 【LeetCode &amp; 剑指offer 刷题笔记】目录(持续更新中...) 74. Search a 2D Matrix Write an efficient algorithm that...

技术改变世界 1315

【linux】解决报错:Network error: Connection refused

【linux】解决报错:Network error: Connection refused

weixin_44502754的博客 4937

有序矩阵查找问题

    给一个行和列都排好序的n*m矩阵,判断一个数是否存在于矩阵中,要求时间复杂度O(n+m),空间复杂度O(1)。    遍历肯定太慢了,看到在矩阵中找,就联想到利用有序矩阵的性质一次否决掉一批元素。因为行和列都是有序的,所以对于矩阵中的每一个元素,同一行左面/同一列上面所有的元素都小于等于它,同一列下面/同一行右面所有的元素都大于等于它,所以每次把一个元素x和给定值a进行比较,都可以否决掉x...

Daniel_2046的博客 1347

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[LeetCode]—Search a 2D Matrix 有序二维矩阵中查找目标值

Search a 2D Matrix   Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to ri

清水 1074

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

行列有序的矩阵中查找某个数是否存在

从右上角的坐标开始,若是比要找的数小,则向下;若比要找的数要大,则向左。直到到达左下角。 public static void seek(int[][] arr,int num){ if(arr==null||arr.length==0){ return; } int ar = 0; int ac = arr[0].length-1; boolean flag = f...

自己写的小东西 1101

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

在行列都排好序的矩阵中找数 【题目】 给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一 列都是排好序的。实现一个函数,判断K 是否在matrix中。 例如: 0 1 2...

从对角考虑 1 package my_basic.class_3; 2 3 /** 4 * 从对角开始 5 */ 6 public class Code_09_FindNumInSortedMatrix { 7 public static boolean isContain(int[][] matrix,int k) { 8 ...

dezhewei9015的博客 735

在行列分别有序的二维矩阵中查找是否有给定值

说明:相信大多数人都见过该题目,本博客是新手所写,望各位大神轻喷。 注意题目:由于给定二维矩阵是行列有序的,所以我们要利用这一条件。假设行、列的元素都是递增排列,那么我们选取的初始元素既可以是左下角,也可以是右上角。最后算法复杂度为o(max(m,n)),m代表行数,n代表列数。 class Solution { public:     bool Find(vector > array,i

handsomeKyne 836

有序二维数组中搜索特定的数

关于二维有序数组中搜索,其题目如下:给定一个矩阵,都是整数,每一行从左到右升序,每一列从上到下有序,例如下面的矩阵[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]请用最快的时间找出特定的数,例如,输入3,存在这个数,输入15,不存在这个数。实现如下的函数bool FindArray(int *pArray,int nWid

心如止水-GISer的成长之路 4686

有序矩阵查找

现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。测试样例: [[1,2,3],[4,5,6],[7,8,9]],3,3,10 返回:false我的提交# -*- coding:utf-8 -*

小旋锋 的博客 886

python 杨氏矩阵查找

‘’’ 在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 使用Step-wise线性搜索: 从右上角开始,每次将搜索值与右上角的值比较。如果大于右上角的值,则直接去除1行,否则去掉1列。 ‘’’ def get_value(l, r, c): return l[r...

Archi_gakki的博客 347

一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中

根据题意可知,最大每行最大数在本行最后一个数;每列最大数在本列最后一个数 解法:每次与最右上角数字比较,若小之,排除次列;若大之,排除此行,实现快速查找bool Existence(int arr[][5],int k) { int row=0; int col=4; while (row<=4 && col>=0) { if (k<arr[row]

centor的博客 2513

在有序二维数组中查找一个整数

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路一:二维数组遍历寻找,最简单,时间复杂度O(N2)。代码略,运行时间11ms.            缺点:忽略了已知条件中二维数组的有序性。思路二:利用有序性,                1,对于该二维数组中任何一个元...

sinat_38972110的博客 574

[LeetCode]215 数组第k大的数

Kth Largest Element in an Array(数组第k大的数)【难度:Medium】 Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For exa

在这一路上寻找。 1万+

【程序员代码面试指南】:Python:CD1 在行列都排好序的矩阵中找指定的数

描述 给定一个N×M的整形矩阵matrix和一个整数K, matrix的每一行和每一列都是排好序的。 实现一个函数,判断K是否在matrix中 [要求] 时间复杂度为O(N+M),额外空间复杂度为O(1)。 输入描述: 第一行有三个整数N, M, K 接下来N行,每行M个整数为输入的矩阵 输出描述: 若K存在于矩阵中输出"Yes",否则输出"No" 示例1 输入: 2 4 5 1 2 3 4 2 4 5 6 输出: Yes 示例2 输入: 2 4 233 1 2 3 4 2 4 5 6 输出: No 代码

Jack_Kuo的博客 434

数据结构算法题/有序矩阵查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,诶一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含了该整数。           例如下面的二维数组就是每行、没列都递增排序。如果在这个数组中查找数字7,则返回true(找得到);如果查找数字5,由于数组不含该数字,则返回false。 1 2 8 9...

fkyyly的专栏 395
上一篇: Set Matrix Zeroes 把一个矩阵置为0 @LeetCode
下一篇: Combinations 求1...n中k长度的组合 @LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值