package com.interview.books.leetcodeoj;
import com.interview.utils.ConsoleWriter;
import java.util.Arrays;
/**
* Created_By: stefanie
* Date: 14-12-19
* Time: 下午3:25
*/
public class LOJ31_NextPermutation {
//find the first element not in non_decreasing order backwards, then find the min element in left larger than current.
//1. check non_decreasing order: while(offset >= 0 && num[offset] >= num[offset + 1]) offset--;
//2. find min element as the replaced num: while(replaceIdx >= 0 && num[replaceIdx] <= num[offset]) replaceIdx--;
public void nextPermutation(int[] num) {
int offset = num.length - 2;
while(offset >= 0 && num[offset] >= num[offset + 1]) offset--;
if(offset < 0){ //decreasing order
Arrays.sort(num);
} else {
int replaceIdx = num.length - 1;
while(replaceIdx >= 0 && num[replaceIdx] <= num[offset]) replaceIdx--;
int temp = num[offset];
num[offset] = num[replaceIdx];
num[replaceIdx] = temp;
Arrays.sort(num, offset + 1, num.length);
}
}
public static void main(String[] args){
int[] num = new int[]{1, 1};
LOJ31_NextPermutation finder = new LOJ31_NextPermutation();
finder.nextPermutation(num);
ConsoleWriter.printIntArray(num);
}
}