Cho ma trận nhị phân. Đếm số phần tử thỏa mãn:
matrix[r][c] = 1- Trên hàng
r: chỉ có duy nhất 1 tại cộtc(các cột khác = 0) - Trên cột
c: chỉ có duy nhất 1 tại hàngr(các hàng khác = 0)
Ví dụ: ma trận 3×3 với 1 tại (0,2), (1,0), (2,1) → kết quả 3.
Thuật toán giải quyết (O(m×n))
- Tính tổng từng hàng:
row[r] = sum(matrix[r]) - Tính tổng từng cột:
col[c] = sum(matrix[r][c] for r) - Duyệt mọi ô: nếu
matrix[r][c] == 1 and row[r] == 1 and col[c] == 1thì đếm++ - Trả về kết quả
Ví dụ minh họa
def solve(matrix):
if not matrix:
return 0
row = [sum(r) for r in matrix]
col = [sum(c) for c in zip(*matrix)]
m, n = len(matrix), len(matrix[0])
res = 0
for r in range(m):
for c in range(n):
if matrix[r][c] == 1 and row[r] == 1 and col[c] == 1:
res += 1
return res
matrix = [[0, 0, 1], [1, 0, 0], [0, 1, 0]]
print(solve(matrix))
Đầu vào
[[0, 0, 1],[1, 0, 0],[0, 1, 0]]
Đầu ra
3