Сегодня мы рассмотрим, как повернуть массив влево.
В этом вопросе о повороте влево может быть сказано, что нужно повернуть 1 цифру влево или n цифр влево, давайте посмотрим оба варианта в этом посте
- Поворот влево на 1 цифру
- Поворот влево на N цифр
Бонус:- давайте рассмотрим коллекции, встроенные в ротацию для правого и левого вращения
давайте посмотрим поворот влево на 1 цифру
int[] reverseTheArrayByOne(int[] arr) {
int temp = arr[0];
for (int i = 1; i < arr.length; i++) {
arr[i - 1] = arr[i];
}
arr[arr.length - 1] = temp;
return arr;
}
Поскольку мы собираемся переместить только одну цифру, мы можем сохранить первую цифру в temp и переместить остальные элементы влево, а temp добавить к последнему индексу.
Рассмотрим N-вращение
Мы можем просто выполнить N rotate, выполнив rotate 1 digit N раз, чтобы получить ответ
int[] reverseTheArrayByNTimesEasy(int[] arr, int digits) {
for (int i = 0; i < digits; i++) {
arr = reverseTheArrayByOne(arr);
}
return arr;
}
или мы можем использовать этот метод
int[] reverseTheArrayByNDigits(int[] arr, int digits) {
int[] temp = new int[digits];
for(int i=0;i<digits;i++){
temp[i]=arr[i];
}
for(int i=0;i<arr.length-digits;i++){
arr[i]=arr[digits+i];
}
for(int i=0;i<temp.length;i++){
arr[digits-1+i]=temp[i];
}
return arr;
}
Чтобы повернуть N цифр, мы можем использовать массив temp для хранения N цифр, переместить оставшиеся цифры в начало и скопировать массив temp в последний.
Бонус :- мы можем просто использовать метод rotate коллекции для выполнения этого массива Rotate
int n = 1;
int[] arr = {2, 5, 8, 9, 12};
List<Integer> arrList =
Arrays.stream(arr).mapToObj((e) -> Integer.valueOf(e)).collect(Collectors.toList());
Collections.rotate(arrList,n);
System.out.println(arrList.toString());
Здесь n — количество цифр, которые нужно повернуть, по умолчанию Collections.rotate будет выполнять поворот вправо, если вы хотите повернуть влево, вы можете дать отрицательное значение.
Collections.rotate(arrList, 1) выполнит правый поворот
Collections.rotate(arrList,-1) выполнит поворот влево