73. Set Matrix Zeroes
- Tags: Mảng, Bảng băm, Ma trận
- Độ khó: Trung bình
Tóm tắt đề bài
Mô tả: Cho một ma trận kích thước .
Yêu cầu: Nếu một phần tử là , hãy đặt tất cả các phần tử trong hàng và cột của nó thành .
Giải thích:
- Vui lòng sử dụng giải thuật “tại chỗ”.
- .
- .
- .
- .
- Nâng cao:
- Một giải pháp trực quan là sử dụng không gian phụ , nhưng đây không phải là một giải pháp tốt.
- Một giải pháp cải tiến đơn giản là sử dụng không gian phụ , nhưng đây vẫn không phải là giải pháp tốt nhất.
- Bạn có thể tìm ra một giải pháp chỉ sử dụng không gian hằng số không?
Ví dụ:
- Ví dụ 1:
Đầu vào: matrix = [[1,1,1],[1,0,1],[1,1,1]]
Đầu ra: [[1,0,1],[0,0,0],[1,0,1]]
- Ví dụ 2:
Đầu vào: matrix = [[1,1,1],[1,0,1],[1,1,1]]
Đầu ra: [[1,0,1],[0,0,0],[1,0,1]]
Ý tưởng giải quyết
Ý tưởng 1: Sử dụng biến đánh dấu
Một cách trực quan là sử dụng hai mảng để đánh dấu hàng và cột xuất hiện , nhưng điều này sẽ tốn không gian , không đáp ứng yêu cầu.
Xem xét việc sử dụng các phần tử của mảng để ghi lại trạng thái xuất hiện .
- Đặt hai biến và để đánh dấu xem hàng đầu tiên và cột đầu tiên có xuất hiện hay không.
- Tiếp theo, chúng ta sử dụng hàng đầu tiên và cột đầu tiên của mảng để đánh dấu trạng thái .
- Duyệt qua từng phần tử của mảng, nếu một phần tử nào đó xuất hiện , chúng ta sử dụng các vị trí tương ứng của hàng đầu tiên và cột đầu tiên của mảng để lưu trữ đánh dấu .
- Tiếp theo, duyệt qua từng phần tử của mảng, dựa vào đánh dấu của hàng đầu tiên và cột đầu tiên để đặt các phần tử tương ứng thành .
- Cuối cùng, dựa vào đánh dấu của hàng đầu tiên và cột đầu tiên để đặt hàng đầu tiên và cột đầu tiên thành .
Ý tưởng 1: Code
Ý tưởng 1: Độ phức tạp
- Độ phức tạp thời gian: .
- Độ phức tạp không gian: .