Java 题解 | #向左移动牛群#
向左移动牛群
https://www.nowcoder.com/practice/e70fc604c3684ce294e6af5e97feff04
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param k int整型 * @return int整型一维数组 */ public int[] rotateCows (int[] nums, int k) { // write code here int len = nums.length; k = k % len; // 处理 k 值大于数组长度的情况 reverse(nums, 0, len - 1); // 将整个数组进行反转 reverse(nums, 0, k - 1); // 将前 k 个元素进行反转 reverse(nums, k, len - 1); // 将剩余的元素进行反转 return nums; } private void reverse(int[] arr, int start, int end) { while (start < end) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } }
该代码使用的编程语言是Java。
这道题考察的知识点包括数组(或列表)的旋转和反转操作。
代码的文字解释如下:
rotate_cows(nums, k)
函数接受一个整数列表nums
和一个整数k
作为参数,并返回一个整数列表。- 对
k
进行取模运算,以处理可能出现的k
值大于列表长度的情况,确保旋转的步数不超过列表长度。 - 通过三次反转操作实现列表的旋转:第一次反转:将整个列表进行反转。第二次反转:将前 k 个元素进行反转。第三次反转:将剩余的元素进行反转。
- 返回旋转后的列表作为结果。
辅助函数 reverse(arr, start, end)
用于反转列表中指定区间的元素。具体操作是通过交换起始位置和结束位置上的元素进行反转。