Today's Leetcode problem is quite interesting and, personally, I found the in-line array mutation tricky to get right.
We are asked to return the next highest number possible with a given array, falling back to sorting it by ascending order if the source value is the highest possible for that set of numbers.
Sound like a couple of loops to me!
var nextPermutation = function(nums) { for (let i = nums.length; i > 0; i--) { if (nums[i - 1] < nums[i]) { let nextHigherIdx = Infinity; for (let j = i; j < nums.length; j++) { if (nums[j] > nums[i - 1] && nums[j] <= (nums[nextHigherIdx] || Infinity)) { nextHigherIdx = j; } } //replacement must be in-place and use only constant extra memory [nums[i - 1], nums[nextHigherIdx]] = [nums[nextHigherIdx], nums[i - 1]]; nums.splice(i, nums.length - i, ...nums.splice(i).reverse()); return; } } //sorted in ascending order as fallback nums.sort((a, b) => a - b); };
//Runtime: 52 ms, faster than 99.41% of JavaScript online submissions
//Memory Usage: 35 MB, less than 33.33% of JavaScript online submissions
Top comments (0)