题解 | 牛群的编号重排

牛群的编号重排

https://www.nowcoder.com/practice/220a216469c14a52b4eb6709e041feb1

import java.util.*;


public class Solution {
    // 4, 2, 3, 1
    // 4, 2, 1, 3
    public int[] nextPermutation (int[] cows) {
        final int n = cows.length;
        if (n == 1) {
            return cows;
        }
        int i = n - 2;
        // find --_-- 凹
        while (i >= 0 && cows[i] <= cows[i + 1]) {
            --i;
        }
        if (i >= 0) {
            int j = n - 1;
            // find first cow le cows[i]
            while (j >= 0 && cows[j] >= cows[i]) {
                --j;
            }
            swap(cows, i, j);
        }
        reverse(cows, i + 1, n - 1);
        return cows;
    } 

    private void swap(final int[] a, final int i, final int j) {
        final int tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
    }

    private void reverse(final int[] a, int l, int r) {
        while (l < r) {
            swap(a, l++, r--);
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务