JavaRush /Java блог /Архив info.javarush /Кухня(); Задание N67
terranum
28 уровень
Milan

Кухня(); Задание N67

Статья из группы Архив info.javarush
Кухня(); Задание N67 - 1 Правила [Одномерные массивы] 67. Дан массив А. Циклически сдвинуть элементы массива на K элементов вправо (влево).
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Airon Уровень 34
7 октября 2014
public static int[] shift(int[] array, int k) {  // если k < 0, то сдвиг влево, иначе вправо
    k = k % array.length;
    if(k == 0)
        return Arrays.copyOf(array, array.length);     // чтобы не передавать тот же array, а новый
    k = k < 0 ? (array.length + k) : k;
    int[] tempA = new int[array.length];
    System.arraycopy(Arrays.copyOfRange(array, array.length - k, array.length), 0, tempA, 0, k);
    System.arraycopy(Arrays.copyOfRange(array, 0, array.length - k), 0, tempA, k, tempA.length - k);
    
  /*// или по одному, но долго и нудно:
    int[] tempA = Arrays.copyOf(array, array.length);
    for (int i = 0; i < k; i++) {
        int temp = tempA[tempA.length - 1];
        for (int j = tempA.length - 1; j > 0; j--) 
            tempA[j] = tempA[j - 1];            
        tempA[0] = temp;
    }*/
    
    return tempA;
}