Как повернуть элементы массива назад - PullRequest
0 голосов
/ 22 сентября 2019

Я хотел бы знать, как я могу принять отрицательное значение для d в следующем коде.Это означает, как я могу пройти массив назад и повернуть его элементы.

catchArray(int [] arr, int d)
{
    int [] bArr = new int[arr.length];

    for(int i = 0; i < bArr.length; i++)
    {
        bArr[(i + d) % bArr.length] = arr[i];
    }

    return bArr;
}

Это мой ответ для назначения LeetCode Rotate Array.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Просто нормализуйте "d" в начале программы.Если оно отрицательное, исправьте его.

Допустим, длина массива равна 10, а d равно -1.Вы получите то же самое вращение, если длина равна 10, а d равно 9. Это все, что происходит при запуске функции.

catchArray(int [] arr, int d)
{
    d = d % arr.length;
    if (d < 0)
    {
        d += arr.length;
    }

    int [] bArr = new int[arr.length];

    for(int i = 0; i < bArr.length; i++)
    {
        bArr[(i + d) % bArr.length] = arr[i];
    }

    return bArr;
}
0 голосов
/ 22 сентября 2019

Если массив имеет размер, например, 10, то вращение -1 совпадает с вращением +9.

В Java оператор остатка % вернет отрицательное значение, если частное равноотрицательное значение, например, -12 % 10 и -2 % 10 оба возвратят -2.

Итак, чтобы получить нормализованное значение вращения, мы делаем это:

MIN_VALUE <= d <= MAX_VALUE

d % size  ->  -size < d < size

+ size    ->  0 < d < size * 2

% size    ->  0 <= d < size  (normalized range)

Комбинировано:

d = (d % arr.length + arr.length) % arr.length

Это нормализует d для поворота менее чем на один полный раунд вправо.

static int[] catchArray(int[] arr, int d) {
    d = (d % arr.length + arr.length) % arr.length;
    int[] bArr = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
        bArr[(i + d) % arr.length] = arr[i];
    }
    return bArr;
}

Тесты

System.out.println(Arrays.toString(catchArray(new int[] {1,2,3,4,5}, -8)));
System.out.println(Arrays.toString(catchArray(new int[] {1,2,3,4,5}, -2)));
System.out.println(Arrays.toString(catchArray(new int[] {1,2,3,4,5}, -1)));
System.out.println(Arrays.toString(catchArray(new int[] {1,2,3,4,5}, 0)));
System.out.println(Arrays.toString(catchArray(new int[] {1,2,3,4,5}, 1)));
System.out.println(Arrays.toString(catchArray(new int[] {1,2,3,4,5}, 2)));
System.out.println(Arrays.toString(catchArray(new int[] {1,2,3,4,5}, 8)));

Выход

[4, 5, 1, 2, 3]
[3, 4, 5, 1, 2]
[2, 3, 4, 5, 1]
[1, 2, 3, 4, 5]
[5, 1, 2, 3, 4]
[4, 5, 1, 2, 3]
[3, 4, 5, 1, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...