题解 | #牛群的编号重排# 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
。 - 完成子数组反转操作。