تدوير المصفوفة [ لوغاريتمات ]

 نريد تدوير مصفوفة من نقطة ما. مثال, بـ n = 7 تمثل عدد عناصر المصفوفة و k = 3 نقطة التدوير و المصفوفة [1,2,3,4,5,6,7] تم تدويرها لتكون كالتالي [5,6,7,1,2,3,4].

1. نقسم المصفوفة إلى قسمين: 1,2,3,4             5,6
2. نعكس عناصر القسم الأول: 4,3,2,1             5,6
3. نعكس عناصر القسم الثاني: 4,3,2,1             6,5
4. نعكس المصفوفة ككل: 5,6,1,2,3,4



public static void main(String[] args) {
    int[] arr = new int[]{ 1, 2, 4, 5, 6 };
    System.out.println(Arrays.toString(arr));
    rotate(arr, 2);
    System.out.println(Arrays.toString(arr));
}

public static void rotate(int[] arr, int order) {
    if (arr == null || arr.length == 0 || order < 0) {
        System.out.println("Wrong data");
        return;
    }

    if (order > arr.length)
        order = order % arr.length;

    //length of first part    int a = arr.length - order;

    reverse(arr, 0, a - 1);
    reverse(arr, a, arr.length - 1);
    reverse(arr, 0, arr.length - 1);

}

public static void reverse(int[] arr, int left, int right) {
    if (arr == null || arr.length == 1)
        return;

    while (left < right) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
}

ليست هناك تعليقات:

إرسال تعليق

---- أتشرف بتعليقاتكم ----