01/10/2018, 16:18
Cho mình xin giải thuật bài này
Giả sử ta có 1 array: [1,2,3,4,5,6,7]
Viết function để “xoay” phần tử trong mạng, d là số lần xoay
d = 1 => [2,3,4,5,6,7,1]
d = 2 => [2,3,4,5,6,7,1] => [3,4,5,6,7,1,2]
d = 3 => [2,3,4,5,6,7,1] => [3,4,5,6,7,1,2] => [4,5,6,7,1,2,3]
Bài liên quan





Chạy vòng for từ 1 đến d, mỗi lần lặp thì đảo phần từ đầu xuống cuối là được mà
Bổ sung cho bạn
n là số phần tử trong mảng ban đầu
Có thể quay với O(1) mem (ừ) và O(n) time. 1 for.
bạn for từ 0 tới d, mỗi lần lặp như vậy thì append cái a[0] vào cuối array, và xoá a[0] đi.
như vậy ko cần phải để ý xem len của array là bao nhiêu, và d là bao nhiêu.
Cách giải của mình như sau:
Em chưa hiểu 2 chỗ:
1.1. Khi di chuyển
1lần,a[0]giờ nằm ởa[1]1.2. Khi di chuyển
4lần,a[0]nằm ởa[4]1.3. Khi di chuyển
nlần,a[0]đứng yên1.4. Khi di chuyển
n + 1lần,a[0]nằm ởa[1]⇨ Khi di chuyển
dlần,a[0]nằm ởa[d % n]1.5. Thứ tự của mảng là không đổi ⇨ Khi di chuyển
dlần, mỗi phần tửa[i]đều đi đến vị tría[i + d % n]1.6. Nếu
i + d % n > nthì lại phải% n1 lần nữa1.7. (i + d % n) % n = (i + d) % n
Cách của bạn sẽ bị lỗi khi mà chữ số trong List có từ 2 chữ số trở lên. Mình thấy cách này tối ưu hơn.