题解 | #牛群的编号重排#

牛群的编号重排

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--;
        }
    }
}

全部评论

相关推荐

06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务