public ArrayList<Integer> previousPermuation(ArrayList<Integer> nums) {
        // write your code
        int i = nums.size() - 1;
        while (i > 0) {
            if (nums.get(i - 1) > nums.get(i)) {
                break;
            }
            --i;
        }
        if (i == 0) {
            Collections.sort(nums, new Comparator<Integer>() {
                public int compare(Integer one, Integer two) {
                    return two - one;
                }
            });
            return nums;
        }
        int position = nums.size() - 1;
        int min = Integer.MAX_VALUE, index = position;
        while (position > i - 1) {
            if (min > nums.get(position)) {
                min = nums.get(position);
                index = position;
            }
        }
        swap(nums, i - 1, index);
        ArrayList<Integer> subarr = new ArrayList<>();
        for (int j = i; j < nums.size(); ++j) {
            subarr.add(nums.get(j));
        }
        Collections.sort(subarr);
        for (int j = 0; j < subarr.size(); ++j) {
            nums.set(i++, subarr.get(j));
        }
        return nums;

    }