搜索二维矩阵【leetcode-74】
题目描述:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。
运行效率
解题思路
- 使用二分法解答
- 从0到总个数n-1,取中间的数,然后转换成坐标
- 然后使用二分法解答
代码如下
function searchMatrix(matrix: number[][], target: number): boolean {
if (!matrix.length) return false;
let pre = 0;
let end = matrix.length * matrix[0].length - 1;
while (pre <= end) {
let i = Math.floor((pre + end) / 2);
const row = Math.floor(i / matrix[0].length);
const col = i % matrix[0].length;
if (matrix[row][col] < target) {
pre = i + 1;
} else if (matrix[row][col] > target) {
end = i - 1;
} else {
return true;
}
}
return false;
}
托普利茨矩阵【leetcode-766】
题目描述
托普利茨矩阵即从矩阵左上角到右下角的对角线上的元素相同,给定矩阵,判断是否是托普利茨矩阵
运行效率
代码如下
function isToeplitzMatrix(matrix: number[][]): boolean {
function testDJX(i: number, j: number) {
while (++i < matrix.length && ++j < matrix[0].length) {
if (matrix[i][j] !== matrix[i - 1][j - 1]) {
return false;
}
}
return true;
}
if (!matrix.length) return true;
for (let i = 0; i < matrix.length; i++) {
if (!testDJX(i, 0)) {
return false;
}
}
for (let i = 1; i < matrix[0].length; i++) {
if (!testDJX(0, i)) {
return false;
}
}
return true;
}