题解 | #牛群的编号重排#
牛群的编号重排
https://www.nowcoder.com/practice/220a216469c14a52b4eb6709e041feb1
考察数组操作以及对于题意的理解。对于怎样找下一个最小排列可以参看第一个回答,已经很详细了。具体操作其实就是从后向前找第一个递增的序列,将其变为递减(从后向前),然后再从这个位置开始到最后的这段区间变为递增序列就可以了。
完整Java代码如下所示
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cows int整型一维数组 * @return int整型一维数组 */ public int[] nextPermutation(int[] cows) { 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--; } } }