首页 > 其他分享 >LeetCode 240.搜索二维矩阵II(中等)

LeetCode 240.搜索二维矩阵II(中等)

时间:2022-11-25 13:35:48浏览次数:57  
标签:false matrix 元素 矩阵 II 240 目标值 LeetCode target

题目描述:

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

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

示例 1:

LeetCode 240.搜索二维矩阵II(中等)_搜索


输入: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:

LeetCode 240.搜索二维矩阵II(中等)_升序_02


输入: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​
  • - <= matrix[i][j] <=
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • - <= target <=

题目分析:

这道题有一个很巧妙的技巧,你可以通过仔细观察就能发现其中的奥秘。特别注意左下角元素或者右上角元素与其他元素的关系。你可以从右上角开始查找,若当前值大于目标值,你就向左移动一格;若当前值小于目标值,你就向下移动一格。如果最终移动到左下角时仍不等于目标值,则说明目标值不存在于矩阵中。或者你可以从左下角开始查找,若当前值大于目标值,你就向右移动一格;若当前值小于目标值,你就向上移动一格。如果最终移动到右上角时仍不等于目标值,则说明目标值不存在于矩阵中。

题解:

执行用时: 5 ms

内存消耗: 44 MB

class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
// 获取矩阵行数
int row = matrix.length;
// 行数为 0 即没有矩阵,直接返回 false
if (row == 0) {
return false;
}
// 获取矩阵列数
int column = matrix[0].length;
// 查找索引
int i = 0, j = column - 1;
// 当行数索引和列数索引没有越界时循环查找
while (i < row && j >= 0) {
// 当前元素刚好为目标元素,返回 true
if (target == matrix[i][j]) {
return true;
} else if (target < matrix[i][j]) {
// 如果目标值小于当前元素,向左查找
--j;
} else {
// 否则目标值大于当前元素,向下查找
++i;
}
}
// 没有找到目标元素返回 false
return false;
}
}

题目来源:力扣(LeetCode)



标签:false,matrix,元素,矩阵,II,240,目标值,LeetCode,target
From: https://blog.51cto.com/u_15891283/5886567

相关文章

  • LeetCode 232.用栈实现队列(简单)
    题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(​​push​​​、​​pop​​​、​​peek​​​、​​empty​​):实现​​MyQueu......
  • LeetCode 448.找到所有数组中消失的数字(简单)
    题目描述:给你一个含​​n​​​个整数的数组​​nums​​​,其中​​nums[i]​​​在区间​​[1,n]​​​内。请你找出所有在​​[1,n]​​​范围内但没有出现......
  • LeetCode 48.旋转图像(中等)
    题目描述:给定一个​​n × n​​​的二维矩阵 ​​matrix​​​表示一个图像。请你将图像顺时针旋转​​90​​度。你必须在原地旋转图像,这意味着你需要直接修改......
  • LeetCode 260.只出现一次的数字III(中等)
    题目描述:给定一个整数数组​​nums​​,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。进阶:你的算法......
  • LeetCode 476.数字的补数(简单)
    题目描述:给你一个正整数​​num​​,输出它的补数。补数是对该数的二进制表示取反。示例1:输入:num=5输出:2解释:5的二进制表示为101(没有前导零位),其补数为010。所以......
  • LeetCode 693.交替位二进制数(简单)
    题目描述:给定一个正整数,检查它的二进制表示是否总是0、1交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。示例1:输入:n=5输出:true解释:5的二进制表示是:101示......
  • LeetCode 268.丢失的数字(简单)
    题目描述:给定一个包含​​[0,n]​​​中​​n​​​个数的数组​​nums​​​,找出​​[0,n]​​这个范围内没有出现在数组中的那个数。进阶:你能否实现线性时间......
  • LeetCode 338.比特位计数(简单)
    题目描述:给你一个整数​​n​​​,对于​​0<=i<=n​​​中的每个​​i​​​,计算其二进制表示中​​1​​​的个数,返回一个长度为​​n+1​​​的数组​......
  • LeetCode 540.有序数组中的单一元素
    LeetCode540.有序数组中的单一元素题目链接:​​https://leetcode-cn.com/problems/single-element-in-a-sorted-array/​​题目描述:给定一个只包含整数的有序数组,每个元......
  • LeetCode 154.寻找旋转排序数组中的最小值II
    LeetCode154.寻找旋转排序数组中的最小值II题目链接:​​https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/​​题目描述:已知一个长度为 n ......