题目:

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

示例 1:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
示例 2:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -10<= matrix[i][j] <= 109
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -10<= target <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/search-a-2d-matrix-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

【二分查找】

这题与 74.搜索二维矩阵 区别在于 不能保证每一行的第一个整数大于上一行的最后一个整数,故可以以行为基准,先遍历一行,再从这一行去遍历每一个数字,从而判断出该行是否存在target,不存在又继续遍历下一行的每个数字。(或者以列为基准,先遍历一列,再从这一列去遍历每个数字,从而判断出该列是否存在target,不存在又继续遍历下一列)行:martrix.length,列:martix[0].length

java代码(left < right)---  以行为基准:

 1 class Solution {
2 public boolean searchMatrix(int[][] matrix, int target) {
3 //n:行;m:列
4 int n = matrix.length, m = matrix[0].length;
5 for (int i = 0; i < n; i++){
6 int left = 0, right = m-1;
7 while (left < right){
8 int mid = left + (right - left + 1) / 2;
9 if (target >= matrix[i][mid]){
10 left = mid;
11 }else{
12 right = mid - 1;
13 }
14 }
15 if (matrix[i][left] == target) return true;
16 }
17 return false;
18 }
19 }

 python3代码(left <= right)--- 以列为基准:

 1 class Solution:
2 def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
3 n, m = len(matrix), len(matrix[0])
4 # 以列为基准
5 for i in range(m):
6 left , right = 0, n - 1
7 while left <= right:
8 mid = left + (right - left) // 2
9 if target > matrix[mid][i]:
10 left = mid + 1
11 elif target < matrix[mid][i]:
12 right = mid - 1
13 else:
14 return True
15 if target == matrix[right][i]:
16 return True
17 return False

力扣240(java&python)-搜索二维矩阵 II(中等)的更多相关文章

  1. Java实现 LeetCode 240 搜索二维矩阵 II(二)

    240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. ...

  2. LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II) 37

    240. 搜索二维矩阵 II 240. Search a 2D Matrix II 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性 ...

  3. Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II)

    Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II) 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵 ...

  4. Leetcode 240.搜索二维矩阵II

    搜索二维矩阵II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有 ...

  5. lintcode:搜索二维矩阵II

    题目 搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没 ...

  6. LintCode-38.搜索二维矩阵 II

    搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复 ...

  7. leetcode-240搜索二维矩阵II

    搜索二维矩阵II class Solution: def searchMatrix(self, matrix, target): """ :type matrix: Li ...

  8. 240. 搜索二维矩阵 II

    二维数组搜索 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ...

  9. 【LeetCode】 240. 搜索二维矩阵 II

    题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 mat ...

  10. leetcode240 搜索二维矩阵 II

    题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ma ...

随机推荐

  1. leaflet 领图 一个本地的类似百度地图工具-不连外网

    官网:https://leafletjs.com/ 二次开发手册-中文:http://112.91.146.167:9090/api/ 领图(一款给力的开源离线地图解决方案) https://blog ...

  2. linux文件管理(补充)

    linux文件管理 vim编辑器 vi概述 vi 编辑器 他是linux和unix系统上最基本的文本编辑器,类似于windows系统下的记事本编辑器 vim编辑器 vim是vi的加强版,比vi更容易使 ...

  3. B站上传视频时各分辨率最佳的码率及格式参数

    相关链接:表格源文件

  4. 求给定两个排序好的数组中第k大的数

    这个问题比求两个长度相等的排序数组的上中位数难度要高一点,难就难在不是求中位数了,但是我们要学会举一反三,可以尝试通过分析将求第k大的数转化为求中位数.将数组中不可能的数排除,在剩下可能的数中求中位数 ...

  5. 记录--你还在使用websocket实现实时消息推送吗?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能 ...

  6. 记录--微信小程序获取用户信息(附代码、流程图)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本篇文章主要总结了微信小程序开发,获取用户信息的整个流程步骤.补充了网上很多碎片化的代码,本人梳理了思路写下了这篇文章. 思路 1.在js ...

  7. Jmeter教程-JMeter 环境安装及配置

    JMeter 环境安装及配置 在使用 JMeter 之前,需要配置相应的环境,包括安装JDK和JMeter. 首先,了解一下JDK,它就是Java的开发工具包. JMeter 是使用 Java 编写的 ...

  8. 大数据hadoop Linux 相关常用命令行操作

    bin/zkServer.sh start bin/zkServer.sh stop 启动Hadoop 1 hadoop102 sbin/start-dfs.sh 2 hadoop103 sbin/s ...

  9. 循环队列(LoopQueue)

    循环队列相比普通的队列,元素出队时无需移动大量元素. 代码 ArrayQueue.h 点它 代码清单 #ifndef C___LOOPQUEUE_H #define C___LOOPQUEUE_H # ...

  10. #RMQ,动态开点线段树#CF803G Periodic RMQ Problem

    题目 给定\(n\)个数,将这个数列复制\(k\)次得到数列\(a\), 对\(a\)满足区间赋值操作和区间最小值询问 \(n\leq 10^5,q\leq 10^5,k\leq 10^4即|a|\l ...