Next Greater Element III
Problem statement
Given a positive integer n, find the smallest integer which has exactly the same digits existing in the integer n and is greater in value than n. If no such positive integer exists, return -1.
Note that the returned integer should fit in 32-bit integer, if there is a valid answer but it does not fit in 32-bit integer, return -1.
Example 1:
Input: n = 12Output: 21
Example 2:
Input: n = 21Output: -1
Constraints:
1 <= n <= 231 - 1
My solution
/**
* @param {number} n
* @return {number}
*/
var nextGreaterElement = function(n) {
const arr = n.toString().split("");
let pivot = -1;
for (let i = arr.length - 1; i > 0; i--) {
if (arr[i - 1] < arr[i]) {
pivot = i - 1
break;
}
}
if (pivot === -1) {
return -1
}
// console.log("pivot", pivot, arr.length - 1)
for (let i = arr.length - 1; i > pivot; i--) {
// console.log("i", i, pivot)
if (arr[i] > arr[pivot]) {
[arr[pivot], arr[i]] = [arr[i], arr[pivot]]
break;
}
}
const left = arr.slice(0, pivot + 1)
// console.log("newNumber", arr)
const right = arr.slice(pivot + 1)
right.reverse()
const newNumber = Number(left.join("") + right.join(""))
return newNumber > Math.pow(2, 31) -1 ? -1 : newNumber;
};