题解 | #牛群的编号重排# java
牛群的编号重排
https://www.nowcoder.com/practice/220a216469c14a52b4eb6709e041feb1
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cows int整型一维数组
* @return int整型一维数组
*/
public int[] nextPermutation (int[] cows) {
// write code here
int i = cows.length - 2;
while (i >= 0 && cows[i] <= cows[i + 1]) {
i--;
}
if (i >= 0) {
int j = cows.length - 1;
while (j >= 0 && cows[i] <= cows[j]) {
j--;
}
swap(cows, i, j);
}
reverse(cows, i + 1, cows.length - 1);
return cows;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
private void reverse(int[] nums, int start, int end) {
while (start < end) {
swap(nums, start, end);
start++;
end--;
}
}
}
编程语言是Java。
该题考察的知识点:
- 数组操作
- 循环和条件语句
代码的文字解释大纲:
- 在
Solution类中创建一个名为nextPermutation的方法,该方法接收一个整型数组cows作为参数,并返回一个整型数组作为结果。 - 声明一个变量
i,初始值为cows.length - 2,用来遍历数组。 - 使用while循环,判断
i是否大于等于0且cows[i]是否小于等于cows[i + 1],如果满足条件,则将i减1。 - 如果
i大于等于0,执行下一步操作。声明一个变量j,初始值为cows.length - 1,用来遍历数组。 - 使用while循环,判断
j是否大于等于0且cows[i]是否小于等于cows[j],如果满足条件,则将j减1。 - 调用辅助方法
swap,将cows数组中索引为i和j的元素进行交换。 - 调用辅助方法
reverse,将从i + 1到数组末尾的子数组进行反转。 - 返回修改后的数组
cows作为结果。
辅助方法swap:
- 声明一个方法,名为
swap,接收一个整型数组nums和两个整型参数i和j。 - 在方法中,声明一个变量
temp,将nums[i]的值赋给temp,然后将nums[j]的值赋给nums[i],最后将temp的值赋给nums[j]。 - 完成元素交换操作。
辅助方法reverse:
- 声明一个方法,名为
reverse,接收一个整型数组nums和两个整型参数start和end。 - 在方法中,使用while循环,比较
start和end的值,如果start小于end,则执行下一步操作。 - 调用辅助方法
swap,将nums数组中索引为start和end的元素进行交换。 - 将
start增加1,将end减少1。 - 继续执行第2步和第3步,直到
start不小于end。 - 完成子数组反转操作。

查看8道真题和解析