力扣刷题之搜索二维矩阵
题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix/
这里提供两种解题思路。
思路一:先确定target在矩阵的哪一行,然后在这行元素中查找是否存在该目标值。
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); int n=matrix[0].size(); if(target<matrix[0][0] || target>matrix[m-1][n-1]) return false; int row=m-1; for(int i=0;i<m;i++) { if(i<m-1 &&target>=matrix[i][0] && target<matrix[i+1][0]) { row=i; break; } } for(int i=0;i<n;i++) { if(target==matrix[row][i]) return true; } return false; } };
思路二:
按题意其实二维数组就是一个递增的一维数组,利用二分查找一维数组。这里注意根据一维数组下标计算出二维数组的下标。
代码如下:
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); if(m==0) return false; int n=matrix[0].size(); int left=0,right=m*n-1; int mid,element; while(left<=right) { mid=(left+right)/2; element=matrix[mid/n][mid%n]; if(target==element) return true; else if(target<element) right=mid-1; else left=mid+1; } return false; }