WELCOME TO Pluto134340小行星

清风湿润,茶烟轻扬。

21.搜索矩阵 ||

240. 搜索二维矩阵 II

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

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

image

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

方法1: 逐行搜

跳出条件:target<本行第一个元素 ——> 终止

target>本行最后一个元素 ——> 直接搜下一行

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m=matrix.length, n=matrix[0].length;
        for(int i=0; i<m; i++){
            if(target>matrix[i][n-1]) continue;
            if(target<matrix[i][0]) return false;
            for(int j=0; j<n; j++){
                if(target==matrix[i][j])return true;
            }
        }
        return false;        
    }
}
View Code

 

方法2:   类似于 二叉搜索树

算法流程:
1.从矩阵 matrix 左下角元素(索引设为 (i, j) )开始遍历,并与目标值对比:

  • 当 matrix[i][j] > target 时,执行 i-- ,即消去第 i 行元素。
  • 当 matrix[i][j] < target 时,执行 j++ ,即消去第 j 列元素。
  • 当 matrix[i][j] = target 时,返回 true ,代表找到目标值。

2.若行索引或列索引越界,则代表矩阵中无目标值,返回 false 。

作者:Krahets   来源:力扣(LeetCode)

image

 

 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             if(target>matrix[i][n-1]) continue;
 6             if(target<matrix[i][0]) return false;
 7             for(int j=0; j<n; j++){
 8                 if(target==matrix[i][j])return true;
 9             }
10         }
11         return false;        
12     }
13 }
View Code

 

posted @ 2026-01-19 10:04  Pluto134340  阅读(0)  评论(0)    收藏  举报