• LeetCode刷题日记:74. 搜索二维矩阵


    搜索二维矩阵

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

    每行中的整数从左到右按升序排列。
    每行的第一个整数大于前一行的最后一个整数。

    示例 1:
    在这里插入图片描述

    输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
    输出:true
    
    • 1
    • 2

    示例 2:
    在这里插入图片描述

    输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
    输出:false
    
    • 1
    • 2

    提示:

    m == matrix.length
    n == matrix[i].length
    1 <= m, n <= 100
    -104 <= matrix[i][j], target <= 104
    
    • 1
    • 2
    • 3
    • 4

    思路:

    因为是有序的,所以先编排每一行的最后一个数字与目标对比,找出目标是否在当前行的范围,不在,那就循环到下一行,直到找到为止,找到当前行,那就使用二分查找算法查找该行中是否存在目标。

    题解:

    class Solution {
        public boolean searchMatrix(int[][] matrix, int target) {
            int m = matrix.length;
            int n = matrix[0].length;
            int x = 0;
            for (int i = 0; i < m; i++) {
                if(matrix[i][n-1] >= target){
                    x = i;
                    break;
                }
            }
            int start = 0, end = n-1;
            while (start <= end){
                int mid = (start + end)/2;
                if(matrix[x][mid] == target){
                    return true;
                }else if(matrix[x][mid] > target){
                    end = mid - 1;
                }else {
                    start = mid + 1;
                }
            }
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    搜索二维矩阵二

    内容差别不大,只是测试样例不一样而已,改改代码即可。

    题解:

    
    ```go
    class Solution {
         public boolean searchMatrix(int[][] matrix, int target) {
            int m = matrix.length;
            int n = matrix[0].length;
            for (int i = 0; i < m; i++) {
                if(matrix[i][n-1] >= target){
                    boolean flag = check(matrix[i], target);
                    if(flag){
                        return true;
                    }
                }
            }
            return false;
        }
        public boolean check(int[] str, int target){
            int start = 0, end = str.length-1;
            while (start <= end){
                int mid = (start + end)/2;
                if(str[mid] == target){
                    return true;
                }else if(str[mid] > target){
                    end = mid - 1;
                }else {
                    start = mid + 1;
                }
            }
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    
    
    • 1
  • 相关阅读:
    一行代码解决CoreData托管对象属性变更在SwiftUI中无动画效果的问题
    【软件与系统安全笔记】四、内存破坏漏洞
    论文笔记 DETR
    AI 人工智能介绍(一)
    什么是深度卷积神经网络,卷积神经网络怎么学
    Mysql学习积累
    【笔者感悟】笔者的工作感悟【三】
    【Linux】yum的介绍和使用
    【PHP实现微信公众平台开发—基础篇】第2章 微信公众账号及申请流程详解
    ESPHome 通过http获取设备的状态
  • 原文地址:https://blog.csdn.net/m0_46198325/article/details/126111344