Bird
Raised Fist0
DSA Pythonprogramming~30 mins

Next Permutation of Array in DSA Python - Build from Scratch

Choose your learning style10 modes available
Next Permutation of Array
📖 Scenario: You are working on a feature for a puzzle game that needs to find the next arrangement of numbers in a sequence. This helps the game show the next possible move to the player.
🎯 Goal: Build a program that finds the next permutation of a list of numbers. If the list is the highest possible order, it should reset to the lowest order.
📋 What You'll Learn
Create a list called nums with the exact values [1, 2, 3]
Create a variable called i to find the first decreasing element from the right
Implement the logic to find the next permutation of nums
Print the nums list after finding the next permutation
💡 Why This Matters
🌍 Real World
Finding the next permutation is useful in games, puzzles, and generating combinations or arrangements in tasks like scheduling or testing.
💼 Career
Understanding permutations helps in algorithm design, problem-solving, and coding interviews for software development roles.
Progress0 / 4 steps
1
Create the initial list
Create a list called nums with the exact values [1, 2, 3].
DSA Python
Hint

Use square brackets to create a list and separate numbers with commas.

2
Find the first decreasing element from the right
Create a variable called i and set it to the index of the first element from the right where nums[i] is less than nums[i + 1]. Start from len(nums) - 2 and move left.
DSA Python
Hint

Use a while loop to move left until you find nums[i] < nums[i + 1].

3
Find the next permutation core logic
If i is not less than 0, create a variable j starting from len(nums) - 1 and move left until nums[j] is greater than nums[i]. Then swap nums[i] and nums[j]. Finally, reverse the sublist from i + 1 to the end of nums.
DSA Python
Hint

Swap the elements and reverse the tail part of the list to get the next permutation.

4
Print the next permutation
Print the nums list after finding the next permutation using print(nums).
DSA Python
Hint

Use the print function to show the final list.

Practice

(1/5)
1. What does the next permutation of an array represent?
easy
A. The next lexicographically greater arrangement of the array elements
B. The array sorted in ascending order
C. The array reversed
D. The smallest element moved to the front

Solution

  1. Step 1: Understand the concept of permutation order

    Permutations can be ordered lexicographically like words in a dictionary.
  2. Step 2: Define next permutation meaning

    The next permutation is the next arrangement that is just greater than the current one in this order.
  3. Final Answer:

    The next lexicographically greater arrangement of the array elements -> Option A
  4. Quick Check:

    Next permutation = next bigger arrangement [OK]
Hint: Next permutation means next bigger order arrangement [OK]
Common Mistakes:
  • Thinking next permutation is just sorting ascending
  • Confusing next permutation with reversing the array
  • Assuming next permutation always moves smallest element front
2. Which of the following Python code snippets correctly swaps two elements arr[i] and arr[j] in an array?
easy
A. arr[i], arr[j] = arr[j], arr[i]
B. arr[i] = arr[j]; arr[j] = arr[i]
C. swap(arr[i], arr[j])
D. arr[i] = arr[j]

Solution

  1. Step 1: Recall Python tuple unpacking for swapping

    Python allows swapping two variables in one line using tuple unpacking.
  2. Step 2: Check each option

    arr[i], arr[j] = arr[j], arr[i] correctly swaps using arr[i], arr[j] = arr[j], arr[i]. arr[i] = arr[j]; arr[j] = arr[i] overwrites arr[i] before assigning arr[j]. swap(arr[i], arr[j]) is invalid syntax without a defined function. arr[i] = arr[j] only assigns one element.
  3. Final Answer:

    arr[i], arr[j] = arr[j], arr[i] -> Option A
  4. Quick Check:

    Python swap uses tuple unpacking [OK]
Hint: Use tuple unpacking to swap in Python [OK]
Common Mistakes:
  • Overwriting one element before swapping
  • Using undefined swap function
  • Assigning only one element instead of both
3. What is the output of the following code snippet?
arr = [1, 3, 2]
# Apply next permutation logic
# Step 1: Find first decreasing element from right (index 0)
# Step 2: Find element just larger than arr[0] from right (index 2)
# Step 3: Swap arr[0] and arr[2]
# Step 4: Reverse elements after index 0

arr[0], arr[2] = arr[2], arr[0]
arr[1:] = arr[1:][::-1]
print(arr)
medium
A. [3, 1, 2]
B. [2, 1, 3]
C. [1, 2, 3]
D. [2, 3, 1]

Solution

  1. Step 1: Identify the first decreasing element from right

    From right, arr[1]=3 > arr[2]=2 (not decreasing), arr[0]=1 < arr[1]=3 (decreasing at index 0)
  2. Step 2: Find element just larger than arr[0] from right

    From right, arr[2]=2 > arr[0]=1, so index 2 chosen
  3. Step 3: Swap arr[0] and arr[2]

    Swap 1 and 2 -> arr becomes [2, 3, 1]
  4. Step 4: Reverse elements after index 0

    Reverse arr[1:] -> arr[1:] = [3,1] reversed to [1,3]
  5. Final Answer:

    [2, 1, 3] -> Option B
  6. Quick Check:

    Next permutation of [1,3,2] = [2,1,3] [OK]
Hint: Swap pivot with next bigger, then reverse suffix [OK]
Common Mistakes:
  • Not reversing suffix after swap
  • Swapping wrong elements
  • Confusing increasing and decreasing order
4. The following code attempts to find the next permutation of arr = [3, 2, 1]. What is the error?
def next_permutation(arr):
    i = len(arr) - 2
    while i >= 0 and arr[i] >= arr[i + 1]:
        i -= 1
    if i >= 0:
        j = len(arr) - 1
        while arr[j] <= arr[i]:
            j -= 1
        arr[i], arr[j] = arr[j], arr[i]
    arr[i + 1:] = reversed(arr[i + 1:])

arr = [3, 2, 1]
next_permutation(arr)
print(arr)
medium
A. The while loop condition is incorrect
B. Swapping elements is done in wrong order
C. Using reversed() returns an iterator, not a list, causing wrong assignment
D. The function does not handle empty arrays

Solution

  1. Step 1: Analyze the reversal line

    The line arr[i + 1:] = reversed(arr[i + 1:]) assigns an iterator to a list slice, which expects a list.
  2. Step 2: Identify correct usage

    To assign reversed elements properly, convert iterator to list: arr[i + 1:] = list(reversed(arr[i + 1:])).
  3. Final Answer:

    Using reversed() returns an iterator, not a list, causing wrong assignment -> Option C
  4. Quick Check:

    reversed() needs list() for slice assignment [OK]
Hint: Use list(reversed(...)) when assigning slices [OK]
Common Mistakes:
  • Assigning reversed() iterator directly to list slice
  • Ignoring empty array edge case
  • Swapping elements incorrectly
5. Given the array arr = [1, 5, 1], what is the next permutation after applying the standard algorithm? Consider duplicates carefully.
hard
A. [5, 1, 5]
B. [1, 1, 5]
C. [1, 5, 1]
D. [5, 1, 1]

Solution

  1. Step 1: Find first decreasing element from right

    From right: arr[1]=5 > arr[2]=1 (not decreasing), arr[0]=1 < arr[1]=5 (decreasing at index 0)
  2. Step 2: Find element just larger than arr[0] from right

    From right, arr[2]=1 not > 1, arr[1]=5 > 1, so index 1 chosen
  3. Step 3: Swap arr[0] and arr[1]

    Swap 1 and 5 -> arr becomes [5, 1, 1]
  4. Step 4: Reverse elements after index 0

    Reverse arr[1:] -> arr[1:] = [1,1] reversed is same [1,1]
  5. Final Answer:

    [5, 1, 1] -> Option D
  6. Quick Check:

    Duplicates handled, next permutation = [5,1,1] [OK]
Hint: Swap pivot with next bigger, reverse suffix even with duplicates [OK]
Common Mistakes:
  • Ignoring duplicates when finding next bigger element
  • Not reversing suffix after swap
  • Assuming next permutation is sorted ascending always
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard