【LeetCode-中等题】240. 搜索二维矩阵 II

文章目录

题目

方法一:暴力双for查找

java 复制代码
public boolean searchMatrix(int[][] matrix, int target) {
        for (int[] row : matrix) {
            for (int element : row) {
                if (element == target) {
                    return true;
                }
            }
        }
        return false;
    }

方法二:二分查找,对每二维数组进行拆分,一行一行的进行二分查找

java 复制代码
public boolean searchMatrix(int[][] matrix, int target) {
     for(int i = 0 ; i<matrix.length;i++){
         boolean isTrue = search(matrix[i],target);
         if(isTrue) return true;
     }
     return false;
    }

    //二分查找方法
    public boolean search(int[] nums,int target){
        int begin = 0 ;//二分起点
        int end = nums.length-1;//二分末尾点
        while(begin <= end){
            int mid = (end - begin)/2 + begin; //取中间点下标
            int midNum = nums[mid];//中间元素
            //判断中间元素与target大小
            if(target == midNum)  return true;//如果中间元素等于目标元素  直接返回结果
            else if(target > midNum )  begin = mid+1; //如果中间元素小于目标值  说明寻找元素肯定在mid+1  ,  end区间  更新下次起点
            else if(target < midNum )  end   = mid-1;//同理
        }
        //循环完没有找到mid元素  说明不存在target
        return false;
    }

方法三:列倒序Z字形查找

java 复制代码
	//关键在于这个判断 
	  if(matrix[row][col] > target)  col --;//若该位置的元素>目标元素,则往左移动一位
	  else if(matrix[row][col] < target)  row ++;//若该位置的元素<目标元素,则往下移动一位
	  else return true;//若满足相等的条件  则返回true
java 复制代码
public boolean searchMatrix(int[][] matrix, int target) {
     int m = matrix.length;
     int n = matrix[0].length;
     int row = 0;//行
     int col = n - 1; //列
     while(row < m && col>=0){
        
         if(matrix[row][col] > target)  col --;//若该位置的元素>目标元素,则往左移动一位
         else if(matrix[row][col] < target)  row ++;//若该位置的元素<目标元素,则往下移动一位
         else return true;//若满足相等的条件  则返回true
        
     }
     return false;
    }
相关推荐
IronMurphy5 小时前
【算法四十三】279. 完全平方数
算法
墨染天姬5 小时前
【AI】Hermes的GEPA算法
人工智能·算法
papership5 小时前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_796826525 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
Beginner x_u6 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
_深海凉_9 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
踩坑记录10 小时前
leetcode hot100 寻找两个正序数组的中位数 hard 二分查找 双指针
leetcode
旖-旎10 小时前
深搜练习(电话号码字母组合)(3)
c++·算法·力扣·深度优先遍历
谭欣辰10 小时前
C++快速幂完整实战讲解
算法·决策树·机器学习
Mr_pyx10 小时前
【LeetHOT100】随机链表的复制——Java多解法详解
算法·深度优先