📖 Scenario: You are working on a feature for a puzzle game where players can rearrange numbers to find the next higher sequence. You need to write code that finds the next permutation of a given array of numbers.
🎯 Goal: Build a program that takes an array of numbers and modifies it to the next permutation in lexicographical order. If no next permutation exists, rearrange it to the lowest possible order (sorted ascending).
📋 What You'll Learn
Create an array 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 modified nums array after applying the next permutation
💡 Why This Matters
🌍 Real World
Finding the next permutation is useful in games, puzzles, and algorithms that require generating sequences in order.
💼 Career
Understanding permutations and array manipulation is important for coding interviews and algorithm design in software development.
Progress0 / 4 steps
1
Create the initial array
Create an array called nums with the exact values [1, 2, 3].
DSA Javascript
Hint
Use const nums = [1, 2, 3]; to create the array.
2
Find the first decreasing element from the right
Create a variable called i and set it to nums.length - 2. Then use a while loop to decrease i while i >= 0 and nums[i] >= nums[i + 1].
DSA Javascript
Hint
Start from the second last index and move left while the current number is not less than the next.
3
Find the element to swap and reverse the suffix
If i >= 0, create a variable j set to nums.length - 1. Use a while loop to decrease j while nums[j] <= nums[i]. Then swap nums[i] and nums[j]. After that, reverse the subarray from i + 1 to the end of nums.
DSA Javascript
Hint
Swap the found elements and reverse the part of the array after i to get the next permutation.
4
Print the next permutation
Print the nums array using console.log(nums).
DSA Javascript
Hint
Use console.log(nums) to show the final array.
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
Step 1: Understand permutation order
Permutations can be ordered lexicographically like words in a dictionary.
Step 2: Define next permutation
The next permutation is the next arrangement that is just greater than the current one in this order.
Final Answer:
The next lexicographically greater arrangement of the array elements -> Option A
Quick Check:
Next permutation means next bigger order [OK]
Hint: Next permutation means next bigger order of elements [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 JavaScript code snippets correctly swaps two elements arr[i] and arr[j] in an array?
Hint: Use temp variable or destructuring to swap elements [OK]
Common Mistakes:
Using Python-style tuple swap in JavaScript
Calling undefined swap function
Assigning without temporary variable causing overwrite
3. What is the output of the following JavaScript code?
function nextPermutation(arr) {
let i = arr.length - 2;
while (i >= 0 && arr[i] >= arr[i + 1]) i--;
if (i >= 0) {
let j = arr.length - 1;
while (arr[j] <= arr[i]) j--;
[arr[i], arr[j]] = [arr[j], arr[i]];
}
let left = i + 1, right = arr.length - 1;
while (left < right) {
[arr[left], arr[right]] = [arr[right], arr[left]];
left++;
right--;
}
return arr;
}
console.log(nextPermutation([1, 3, 2]));
medium
A. [1, 2, 3]
B. [2, 1, 3]
C. [1, 3, 2]
D. [3, 1, 2]
Solution
Step 1: Find first decreasing element from right
i starts at index 1 (value 3), arr[1] >= arr[2] (3 >= 2) true, so i-- to 0. arr[0] = 1, arr[1] = 3, 1 < 3, stop at i=0.
Step 2: Find element to swap with arr[i]
j starts at 2 (value 2), arr[2] > arr[0] (2 > 1) true, swap arr[0] and arr[2]: array becomes [2, 3, 1]. Then reverse from i+1=1 to end: reverse [3,1] to [1,3]. Final array: [2,1,3].
Final Answer:
[2, 1, 3] -> Option B
Quick Check:
Next permutation of [1,3,2] is [2,1,3] [OK]
Hint: Find first decreasing from right, swap, then reverse tail [OK]
Common Mistakes:
Not reversing the tail after swap
Swapping wrong elements
Confusing >= with > in conditions
4. The following code attempts to find the next permutation of an array but has a bug. What is the bug?
function nextPermutation(arr) {
let i = arr.length - 2;
while (i >= 0 && arr[i] > arr[i + 1]) i--;
if (i >= 0) {
let j = arr.length - 1;
while (arr[j] < arr[i]) j--;
[arr[i], arr[j]] = [arr[j], arr[i]];
}
let left = i + 1, right = arr.length - 1;
while (left < right) {
[arr[left], arr[right]] = [arr[right], arr[left]];
left++;
right--;
}
return arr;
}
medium
A. The function does not handle empty arrays
B. The swap syntax is incorrect
C. The reversal loop should start from i, not i + 1
D. The comparison operators in while loops should be >= and <= instead of > and <
Solution
Step 1: Check the first while loop condition
The code uses arr[i] > arr[i + 1], but it should be arr[i] >= arr[i + 1] to correctly find the first decreasing element from right.
Step 2: Check the second while loop condition
Similarly, arr[j] < arr[i] should be arr[j] <= arr[i] to find the correct element to swap.
Final Answer:
The comparison operators in while loops should be >= and <= instead of > and < -> Option D
Quick Check:
Use >= and <= to find correct indices [OK]
Hint: Use >= and <= in comparisons to find correct swap points [OK]
Common Mistakes:
Using > and < instead of >= and <=
Swapping wrong elements
Not reversing the tail correctly
5. Given the array [5, 4, 7, 5, 3, 2], what is the next permutation after applying the next permutation algorithm?
hard
A. [5, 4, 7, 5, 3, 2]
B. [5, 5, 2, 3, 7, 4]
C. [5, 5, 2, 3, 4, 7]
D. [5, 4, 7, 5, 2, 3]
Solution
Step 1: Find first decreasing element from right
Start from index 4 (value 3), arr[4] >= arr[5] (3 >= 2) true, i-- to 3 (value 5), arr[3] >= arr[4] (5 >= 3) true, i-- to 2 (value 7), arr[2] >= arr[3] (7 >= 5) true, i-- to 1 (value 4), arr[1] < arr[2] (4 < 7) stop at i=1.
Step 2: Find element to swap with arr[i]
j starts at 5 (value 2), arr[5] <= arr[1] (2 <= 4) true, j-- to 4 (value 3), arr[4] <= arr[1] (3 <= 4) true, j-- to 3 (value 5), arr[3] > arr[1] (5 > 4) stop at j=3.