01/10/2018, 16:35

Block swap algorithm for array rotation

Mọi người cho em hỏi bài dưới nếu mảng 7 phần tử, n =2, d=10 thì sau khi swap 7 phần tử xong phải làm gì ạ? vì đề ko hề bắt là d < size mảng.

Write a function rotate(ar[], d, n) that rotates arr[] of size n by d elements.

Rotation of the above array by 2 will make array

Nguyễn Đình Anh viết 18:41 ngày 01/10/2018

Bạn có thể để ý: d = 7 thì sau khi xoay ta sẽ được một mảng y hệt như cũ, vậy nên chỉ cần xoay d' = d % 7 là được


Tiện mình cũng đưa ra giải thuật bày này luôn Nếu bạn để ý chút thì sẽ thấy

  • Các phần tử cần xoay sẽ di chuyển về vị trí = size - d + vị trí của số đó trong mảng
  • Còn vị trí của các phần tử còn lại sẽ thành A[d + vị trí của số đó trong mảng]

Nếu bạn vẫn chưa hiểu thì có thể xem qua code của mình ở đây nhé

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. import java.util.Arrays; public class Spin_Array { public static void main(String[] args) { // Var int[] arr = {1,2,3,4,5,6,7}; // Test System.out.println(Arrays.toString(spin(arr, arr.length, 1))); } private static int[] spin(int[] arr, int size, int d) { if(d >= size) { d = d % s…

mmmm viết 18:43 ngày 01/10/2018

ủa bạn ơi, bên kia size là length của mảng hay size là số phần dịch chuyển vậy? sao bạn lại để
int[] output = new int[size];

Nguyễn Đình Anh viết 18:45 ngày 01/10/2018

size là length của mảng bạn nhé

mmmm viết 18:36 ngày 01/10/2018

hình như đề size chỗ đó là số phần tử dịch chuyển mà

Nguyễn Đình Anh viết 18:37 ngày 01/10/2018

Trong thuật toán của mình thì size là length của mảng, bạn có thể đổi lại để giống đề. Mình chỉ đưa ra ý tưởng thôi

mmmm viết 18:38 ngày 01/10/2018

Cảm ơn bạn nhiều nha, thuật toán bạn hay quá, mình chẳng nghĩ ra được

Bài liên quan
0