У меня проблема с LeetCode:
Если задана матрица M x N, вернуть True, если и только если матрица является теплицевой.
Матрица имеет значение Теплиц , есликаждая диагональ от верхнего левого до нижнего правого имеет один и тот же элемент.
Мое решение (Swift):
func isToeplitzMatrix(_ matrix: [[Int]]) -> Bool {
if matrix.count == 1 { return true }
for i in 0 ..< matrix.count - 1 {
if matrix[i].dropLast() != matrix[i + 1].dropFirst() { return false }
}
return true
}
Как я понял обозначение Big O, сложность времени моего алгоритма равна O(n), в то время как верхние ответы LeetCode 'O (n ^ 2).
Пример верхних ответов:
func isToeplitzMatrix(_ matrix: [[Int]]) -> Bool {
for i in 0..<matrix.count-1 {
for j in 0..<matrix[0].count-1 {
if (matrix[i][j] != matrix[i+1][j+1]) {
return false;
}
}
}
return true;
}
Тем не менее, мой алгоритм занимает 36 мс (согласно LeetCode), в то время как topответ занимает 28 мс.
Когда я прокомментировал if matrix.count == 1 { return true }
, потребовалось еще больше времени - 56 мс.