当前位置: 首页 > news >正文

Leetcode JAVA刷刷站(74)搜索二维矩阵

一、题目概述

二、思路方向 

       要在一个满足上述条件的矩阵中查找一个整数 target,我们可以利用矩阵的排序和递增特性来优化搜索过程。由于矩阵的每一行都是非严格递增的,且后一行的第一个元素大于前一行的最后一个元素,我们可以将矩阵视为一个有序的一维数组,并采用二分查找的方法来加速搜索过程。

三、代码实现 

public class Solution {  public boolean searchMatrix(int[][] matrix, int target) {  if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {  return false;  }  int m = matrix.length;  int n = matrix[0].length;  int left = 0;  int right = m * n - 1;  while (left <= right) {  int mid = left + (right - left) / 2;  int midVal = getElement(matrix, mid / n, mid % n);  if (midVal == target) {  return true;  } else if (midVal < target) {  left = mid + 1;  } else {  right = mid - 1;  }  }  return false;  }  // 辅助函数,根据二维数组的索引(转换为一维数组的索引)来获取元素值  // row 和 col 分别是二维数组的行和列索引  private int getElement(int[][] matrix, int row, int col) {  return matrix[row][col];  }  public static void main(String[] args) {  Solution solution = new Solution();  int[][] matrix = {  {1, 3, 5, 7},  {10, 11, 16, 20},  {23, 30, 34, 50}  };  int target = 3;  System.out.println(solution.searchMatrix(matrix, target)); // 输出 true  target = 20;  System.out.println(solution.searchMatrix(matrix, target)); // 输出 true  target = 22;  System.out.println(solution.searchMatrix(matrix, target)); // 输出 false  }  
}

执行结果: 

四、小结

       这段代码首先检查矩阵是否为空或大小为0,然后初始化二分查找的左右边界(即将二维矩阵转换为一维数组时的索引范围)。在循环中,通过计算 mid 的行和列索引来获取中间元素的值,并与 target 进行比较。根据比较结果更新查找的边界,直到找到 target 或搜索范围为空。

       注意,这里通过 mid / n 和 mid % n 将一维索引转换为二维索引,其中 n 是矩阵的列数。这样我们就可以在二维矩阵上应用二分查找算法了。

 结语   

你不甘平凡的勇气

是改写命运的笔

!!!


http://www.mrgr.cn/news/5238.html

相关文章:

  • Vue的生命周期了解
  • C#实现数据采集系统-数据反写(1)MQTT订阅接收消息
  • 实现AOP机制 + Spring总结
  • 甲烷传感器的应用领域:从油气行业到环境监测的全面覆盖
  • 【机器学习】联邦学习技术
  • React 入门第三天:深入理解Hooks的强大功能
  • Python:Django 和 Tornado 的关系
  • LongWriter——从长文本语言模型中释放出10,000+字的生成能力
  • Docker私人学习笔记
  • git 目录提交代码
  • 浪潮服务器NVME 硬盘通过 Intel VROC 做RAID
  • C 作用域规则
  • 51 无显式主键时 mysql 增加的 DB_ROW_ID
  • 分形比特币(Fractal Bitcoin)
  • CentsOS 7 “Could not resolve host: mirrorlist.centos.org; 未知的错误”问题解决
  • day32(学习playbook-roles+脚本创建数据库和表+mycat读写分离))
  • 【论文阅读】A Closer Look at Parameter-Efficient Tuning in Diffusion Models
  • ant design pro 中用户的表单如何控制多个角色
  • ~构造类型~
  • Pytorch添加自定义算子之(12)-开闭原则设计tensorrt和onnxruntime推理语义分割模型