力扣74(java&python)-搜索二维矩阵(中等)
题目:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/search-a-2d-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
【两次二分】
根据题目意思,每一行从上到下是升序的,每一列从上到下都是升序的,这样的话就可以运用两次二分查找,先找到合适的行,再找到合适的列。
- 第一次二分:从第0列中的所有行开始找,先聚焦target在哪个具体的行row;
- 第二次二分:在找到行的基础上,去找到合适的列col,从而就能确定出target是否在二维矩阵中。
java代码:
1 class Solution {
2 public boolean searchMatrix(int[][] matrix, int target) {
4 int m = matrix.length, n = matrix[0].length;
5 //第一次二分先找到行号
6 int left = 0, right = m - 1;
7 while (left < right){
8 int mid = left + (right - left + 1) / 2;
9 if (target >= matrix[mid][0]){
10 left = mid;
11 }else{
12 right = mid - 1;
13 }
14 }
15 //循环结束时:left > right
16 int row = right;
17 if (matrix[row][0] > target) return false;
18 //第二次二分找到列
19 left = 0; right = n - 1;
20 while (left < right){
21 int mid = left + (right - left) / 2;
22 if (target == matrix[row][mid]) return true;
23 if (target > matrix[row][mid]){
24 left = mid + 1;
25 }else {
26 right = mid;
27 }
28 }
29 int col = right;
30 return matrix[row][col] == target;
31 }
32 }

python3代码:
1 class Solution:
2 def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
3 m, n = len(matrix), len(matrix[0])
4 left, right = 0, m - 1
5 while left <= right:
6 mid = left + (right - left) // 2
7 if target > matrix[mid][0]:
8 left = mid + 1
9 elif target < matrix[mid][0]:
10 right = mid - 1
11 else:
12 return True
13 row = right
14 left, right = 0, n-1
15 while left <= right:
16 mid = left + (right - left) // 2
17 if target > matrix[row][mid]:
18 left = mid + 1
19 elif target < matrix[row][mid]:
20 right = mid - 1
21 else:
22 return True
23 return False

【直接遍历】
遍历查找每个位置,看target是否出现。
java代码:
1 class Solution {
2 public boolean searchMatrix(int[][] matrix, int target) {
3 int m = matrix.length, n = matrix[0].length;
4 for (int i = 0; i < m; i++){
5 for (int j = 0; j < n; j++){
6 if (matrix[i][j] == target){
7 return true;
8 }
9 }
10 }
11 return false;
12 }
13 }

python代码:
1 class Solution:
2 def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
3 m, n = len(matrix), len(matrix[0])
4 for i in range(m):
5 for j in range(n):
6 if matrix[i][j] == target:
7 return True
8 return False

力扣74(java&python)-搜索二维矩阵(中等)的更多相关文章
- LeetCode(74):搜索二维矩阵
Medium! 题目描述: 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 ...
- Java实现 LeetCode 74 搜索二维矩阵
74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: ...
- LeetCode:搜索二维矩阵【74】
LeetCode:搜索二维矩阵[74] 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的 ...
- LeetCode 74. 搜索二维矩阵(Search a 2D Matrix)
74. 搜索二维矩阵 74. Search a 2D Matrix 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. ...
- 【leetcode】74. 搜索二维矩阵
题目链接:传送门 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 ...
- Java实现 LeetCode 240 搜索二维矩阵 II(二)
240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. ...
- lintcode:搜索二维矩阵II
题目 搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没 ...
- lintcode :搜索二维矩阵
题目: 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1 ...
- LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II) 37
240. 搜索二维矩阵 II 240. Search a 2D Matrix II 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性 ...
- LeetCode74.搜索二维矩阵
74.搜索二维矩阵 描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 示 ...
随机推荐
- 基于python的密码生成器实例解析
一 概念 密码生成不复杂,可是它却涉及到了string的常用技巧和一些概念 记得python中的random模块,这是所有随机数的藏身之处 记得python中的string模块,这个是字符操作的盛 ...
- Kotlin 集合对象的单条件和多条件排序
原文: Kotlin 集合对象的单条件和多条件排序 - Stars-One的杂货小窝 本文不是太难的东西,因为sortedWith之前没怎么用过,所以就记录下 平常开发经常使用到List,Map等数据 ...
- Java加密技术(二)——对称加密算法DES&AES
desdesedejavaaes 接下来我们介绍对称加密算法,最常用的莫过于DES数据加密算法. DES DES-Data Encryption Standard,即数据加密算法.是IBM公司 ...
- 纯前端实现 PNG 图片压缩 | UPNG.js
在线 Demo 体验地址 →: https://demos.sugarat.top/pages/png-compress/ 前言 最近在迭代自己的 图床 应用,由于使用时间的累计,存储空间占用越来越大 ...
- python高级技术(网络编程二)
一 粘包现象(基于TCP协议实现远程执行命令) 1.TCP协议,会出现粘包现象 例:ipconfig命令,客户端收到的字符串比较短,客户端能够收完整, tasklist命令,客户端收到的字符串超过10 ...
- Snackbar源码分析
目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Sna ...
- 记录--canvas 复刻锤子时钟
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 介绍 canvas:使用脚本 (通常为 JavaScript) 来绘制图形的 HTML 元素. 本人遍历了以下两份文档,学习完就相当于有了 ...
- 记录--JS-SDK页面打开提示realAuthUrl错误
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 测试环境好好地功能,上了生产,莫名其妙报错,开始以为是没有设置Js安全接口域名,结果让相应人员一查,已经设置了相应的域名,再看下公众号内的 ...
- 《Go程序设计语言》学习笔记之数组
<Go程序设计语言>学习笔记之数组 一. 环境 Centos8.5, go1.17.5 linux/amd64 二. 概念 数组是具有固定长度且拥有零个或多个相同数据类型元素的序列. 三. ...
- Python数据库编程全指南SQLite和MySQL实践
本文分享自华为云社区<Python数据库编程全指南SQLite和MySQL实践>,作者: 柠檬味拥抱. 1. 安装必要的库 首先,我们需要安装Python的数据库驱动程序,以便与SQLit ...