leetcode—搜索二维矩阵II

这篇具有很好参考价值的文章主要介绍了leetcode—搜索二维矩阵II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

示例 1:

leetcode—搜索二维矩阵II,leetcode,矩阵,算法,java

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

方法一

暴力求解

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        // 方法一 :暴力求解
        // 遍历数组
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix[0].length; j++){
                if(matrix[i][j] == target){
                    return true;
                }
            }
        }
        // 若遍历完数组还是没有找到目标值 返回false
        return false;

    }
}

方法二

对矩阵的每一行采用二分查找进行查找

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        // 遍历矩阵的第一层 即每一行 使用增强for循环
        for(int[] row: matrix){
            int index = binarySearch(row, target);
            if(index >= 0){
                return true;
            }
        }
        return false;

    }
    // 二分查找
    public int binarySearch(int[] matrix, int target){
        int left = 0;
        int right = matrix.length -1;
        while(left <= right){
            int mid = (left + right)/2;
            if(matrix[mid] == target){
                return mid;
            }else if(matrix[mid] > target){
                right = mid -1;
            }else{
               left = mid + 1; 
            }
        }
        // 若还未找到 返回-1
        return -1;
    }
}

方法三

Z字型查找

从矩阵的右上角(0,n-1)进行搜索

具体过程. - 力扣(LeetCode)文章来源地址https://www.toymoban.com/news/detail-796615.html

  • 若matrix[x,y] == target,返回true
  • 若 matrix[x,y] > target,  那么第y 列的所有元素都是大于target的 因此 y--
  • 若matrix[x,y] < target,    那么第 x 行的所有元素都小于target, 因此x++    
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        // 数组判空
        if(matrix.length == 0){
            return false;
        }
        int m = matrix.length;  // 计算矩阵的行数
        int n = matrix[0].length;   // 计算矩阵的列数
        // 从右上角开始查找
        int x = 0;
        int y = n-1;

        // 循环查找
        while(x < m && y >= 0){
            if(matrix[x][y] == target){
                return true;
            }else if(matrix[x][y] > target){
                // 消去列
                y--;
            }else{
                // 消去行
                x++;
            }
        }
        // 若循环结束 还未找到 返回false
        return false;

    }
}

到了这里,关于leetcode—搜索二维矩阵II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法学习——LeetCode力扣补充篇11(64. 最小路径和、48. 旋转图像 、169. 多数元素、394. 字符串解码、240. 搜索二维矩阵 II )

    64. 最小路径和 - 力扣(LeetCode) 描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 示例 1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→

    2024年04月23日
    浏览(32)
  • 【算法详解】力扣240.搜索二维矩阵II

    力扣链接:力扣240.搜索二维矩阵II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目提到该矩阵是从左到右,从上到下递增的,那么我们就要利用这个性质,从矩阵

    2024年01月21日
    浏览(35)
  • 【LeetCode热题100】打卡第42天:滑动窗口最大值&搜索二维矩阵II

    大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种

    2024年02月10日
    浏览(36)
  • LeetCode 热题 100(四):48. 旋转图像、240. 搜索二维矩阵 II、234. 回文链表

    题目要求:就是一个顺时针的旋转过程。  思路:观察矩阵,得出翻转前第i行的第J个元素  等于  翻转后倒数第i列的第J个元素,举例说明,第1行第2个元素为“2”,翻转后到了 倒数第1列的第2个元素。说白了只需要针对翻转前的第i行和翻转后的倒数第i列 代码: 题目要求

    2024年02月11日
    浏览(24)
  • 算法leetcode|74. 搜索二维矩阵(rust重拳出击)

    给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。 m == matrix.length n == matrix[i].length 1 = m, n = 100 -10 4 = matrix[i][j],

    2024年02月11日
    浏览(27)
  • leetcode 74. 搜索二维矩阵(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/search-a-2d-matrix 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回

    2024年02月16日
    浏览(33)
  • 240. 搜索二维矩阵 II

    利用矩阵中的单调性进行搜索。

    2024年02月16日
    浏览(26)
  • 搜索二维矩阵 II

    搜索二维矩阵 II 矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 最初想到使用深度优先遍历+剪枝实现,但是运行后超出时间限制了 可以直接遍历整个矩阵查找,虽然不超时但是耗时毕竟高 从右上角开始遍历矩阵,也就是x最初为0,y最初

    2024年02月10日
    浏览(39)
  • Leetcode74. 搜索二维矩阵

    给你一个满足下述两条属性的  m x n  整数矩阵: 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数  target  ,如果  target  在矩阵中,返回  true  ;否则,返回  false  。    

    2024年02月11日
    浏览(20)
  • 【LeetCode】74. 搜索二维矩阵

    思路 总体思路 由于二维矩阵固定列的「从上到下」或者固定行的「从左到右」都是 升序 的 因此我们可以使用 两次二分 来定位到目标位置。 第一次二分: 从第 0 列中的「所有行」开始找,找到合适的行 row, 即找到最后一个满足 matrix[x][0] = target 的行号; 第二次二分:从

    2024年02月09日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包