30 ngày chống COVID cùng Leetcode | Ngày 02

Tôi vừa debug xong một bài tập mất 15 tiếng, khá tốn thời gian, cảm thấy tiếc vô cùng, và sau khi tìm mọi cách để "mì ăn liền" trên stackoverflow không được, cuối cùng, tôi phải tự đọc console lỗi và debug bằng cách thử từng bước 1, mệt thật, nhưng không sao, cũng đúng giờ Leetcode vừa ra bài tập cho ngày thứ 2, không đúng giờ để làm nhưng thôi coi như một ngoại lệ, bắt đầu nào.


Đề bài làm tôi nhớ đến một kiến thức cũ thú vị, ban đầu đọc đề, ta có thể nghĩ đến dùng một Từ điển để lưu lại các giá trị đã xuất hiện, nếu nó xuất hiện lần nữa thì không phải Happy Number. Cách đó với Java có thể mất O(k). Tuyệt vời.

Nhưng có thể tuyệt hơn thế không ? 

Trong quyển sách Data Structures and Algorithms made easy của Narasimha Karumanchi có đề cập đến một giải pháp rất hay để tìm được điểm lặp của một liên kết vô định.


Tức là, nếu có hai biến chạy, một biến chạy chậm, một biến chạy nhanh gấp đôi biến kia, thì ta luôn sẽ tìm thấy một thời điểm hai biến chạy này gặp lại nhau nếu nó ở trong một vòng lặp vô hạn. 

Bạn có thể đọc thêm về Floy Cycle tại đây.

Vậy là Apcept trên Leetcode, một bài toán không quá khó, làm tôi có động lực đọc tiếp cuốn sách của Narasimha.

Hẹn gặp bạn ở những bài viết sau, cảm ơn !

Nhận xét

Bài đăng phổ biến từ blog này

Hiểu về Norm Regularization

Faceswap & state-of-the-art (SOTA)