题目描述(中等难度)
判断一个矩阵中是否存在某个数,矩阵是有序的。
解法一 二分法
看到了有序序列,啥都不用想直接二分,只需要考虑到怎么把二分时候的下标转换为矩阵的行、列下标就可以了,很简单,用除法和求余就够了。
public boolean searchMatrix(int[][] matrix, int target) {
int rows = matrix.length;
if (rows == 0) {
return false;
}
int cols = matrix[0].length;
int left = 0;
int right = rows * cols - 1;
while (left <= right) {
int mid = (left + right) / 2;
int temp = matrix[mid / cols][mid % cols];
if (temp == target) {
return true;
} else if (temp < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return false;
}
时间复杂度:O ( log ( n ) )。
空间复杂度:O ( 1 )。
总
这道题的二分法,比较简单,大家可以看下33题,相信对二分法会有一个更深刻的理解。
添加好友一起进步~
如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^
如果想系统的学习数据结构和算法,强烈推荐一个我之前学过的课程,可以点击 这里 查看详情
当前内容版权归 wind-liang 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 wind-liang .