LintCode 1174. The next bigger element III JavaScript algorithm

description

Given a 32-bit integer n, use the same number to form a new 32-bit integer, making it larger than n, and return the smallest such number. If there is no such integer, return -1.

Sample

- 样例 1:

输入: 12
输出: 21

- 样例 2:

输入: 21
输出: -1

Parsing

nextGreaterElement = function (n) {
    
    
    function check(source, sort){
    
    
        for(let i = 0; i < source.length; i++){
    
    
            if(source[i] != sort[i]){
    
    
                return true;
            }
        }
        return false;
    }
    function buildString(str){
    
    
        let strArray = str.split(''),
            firstChar = strArray.shift(),
            sortArray = [...strArray].sort((a, b)=> a > b ? -1 : 1),
            res = '';
        if(!check(strArray, sortArray)){
    
    
            for(let i = 0; i <= sortArray.length; i++){
    
    
                if(sortArray[i] <= firstChar || i == sortArray.length){
    
    
                    res += sortArray[i - 1];
                    sortArray.splice(i - 1, 1, firstChar);
                    break;
                }
            }
            sortArray.sort((a, b)=> a > b ? 1 : -1);
            return res + sortArray.join('');
        }
        return firstChar + buildString(strArray.join(''));
    }

    let nToString = n.toString().split(''),
        sortSet = [...nToString].sort((a, b)=> a > b ? -1 : 1);
    if(check(nToString, sortSet)){
    
    
        let num = buildString(nToString.join('')) - 0;
        return num > Math.pow(2, 31) - 1 ? -1 : num;
    }
    return -1;
}


operation result

Insert picture description here

Guess you like

Origin blog.csdn.net/SmallTeddy/article/details/108635784
Recommended