2022-10-31 Daily Challenge
Today I have done leetcode's October LeetCoding Challenge with cpp.
October LeetCoding Challenge 31
Description
Toeplitz Matrix
Given an m x n matrix, return true if the matrix is Toeplitz. Otherwise, return false.
A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same elements.
Example 1:
Input: matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]] Output: true Explanation: In the above grid, the diagonals are: "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]". In each diagonal all elements are the same, so the answer is True.
Example 2:
Input: matrix = [[1,2],[2,2]] Output: false Explanation: The diagonal "[1, 2]" has different elements.
Constraints:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 200 <= matrix[i][j] <= 99
Follow up:
- What if the
matrixis stored on disk, and the memory is limited such that you can only load at most one row of the matrix into the memory at once? - What if the
matrixis so large that you can only load up a partial row into the memory at once?
Solution
auto speedup = [](){
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
return 0;
}();
class Solution {
public:
bool isToeplitzMatrix(vector<vector<int>>& matrix) {
int rows = matrix.size();
int cols = matrix.front().size();
for(int i = 0; i < cols - 1; ++i) {
int element = matrix[0][i];
for(int j = 1; j + i < cols && j < rows; ++j) {
if(matrix[j][i + j] != element) return false;
}
}
for(int i = 1; i < rows - 1; ++i) {
int element = matrix[i][0];
for(int j = 1; i + j < rows && j < cols; ++j) {
if(matrix[i + j][j] != element) return false;
}
}
return true;
}
};
// Accepted
// 483/483 cases passed (17 ms)
// Your runtime beats 88.89 % of cpp submissions
// Your memory usage beats 15.16 % of cpp submissions (17.5 MB)