Understand Find Next Permutation Problem

Problem Name: Find Next Permutation
Problem Description:

Problem: Find Next Permutation

Difficulty: Medium

Problem Description

A permutation of an array of integers is an arrangement of its elements into a sequence or linear order.

For example, for arr = [1,2,3], the following are all the permutations:

[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]

The next permutation of an array is the next lexicographically greater permutation of its integers. More formally, if all permutations are sorted in ascending lexicographical order, the next permutation is the one that follows it in that order.

If no such arrangement is possible (i.e., the array is in descending order), rearrange the array as the smallest possible order (sorted in ascending order).

Examples

  • The next permutation of arr = [1,2,3] is [1,3,2].
  • The next permutation of arr = [2,3,1] is [3,1,2].
  • The next permutation of arr = [3,2,1] is [1,2,3] (since no larger permutation exists).

Task

Given an array of integers nums, find the next permutation of nums.

  • The replacement must be in-place (i.e., modify nums directly).
  • Use only constant extra memory.

Examples

Example 1

Input:

nums = [1,2,3]

Output:

[1,3,2]

Example 2

Input:

nums = [3,2,1]

Output:

[1,2,3]

Example 3

Input:

nums = [1,1,5]

Output:

[1,5,1]

Example 4 (Edge Case: Single element array)

Input:

nums = [5]

Output:

[5]  # No change

Example 5 (Edge Case: Already largest permutation)

Input:

nums = [9,8,7,6,5,4,3,2,1]

Output:

[1,2,3,4,5,6,7,8,9]  # Reset to lowest order

Constraints

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100
Category:No additional categories provided
Programming Language:
  • Java
Reference Link:

https://leetcode.com/problems/next-permutation/

Online IDE

Scroll down for output
Java
Output:

Loading component...

Loading component...

Tracking code (View only. In case you want to track the code, click this button):
Main Function:

Main Function is not defined.

Helper Function:

INPUT: nums = [1,2,3]

OUTPUT: [1,3,2]

public static void nextPermutation(int[] nums) {

int n = nums.length;

int i = n - 2;

while (i >= 0 && nums[i] >= nums[i + 1]) {

while (nums[i] >= nums[i + 1]) {

i--;

}//Loop End

if (i >= 0) {

int j = n - 1;

while (nums[j] <= nums[i]) {

j--;

}//Loop End

swap(nums, i, j);

}//If End

reverse(nums, i + 1, n - 1);

}function end

Utility Functions and Global variables:

Utility Function is not required.