一道筆試題-給定一個正整數序列,請嘗試將它們重新排列使得排列的結果最大。


問題描述:給定一個正整數序列,請嘗試將它們重新排列使得排列的結果最大,例如正整數序列為9,31,35,3,7則最大值為9735331.

思路分析:先將正整數序列轉換為字符串數組,然后字符串數組進行排序,最后依次輸出字符串數組即可。根據題目的要求,兩個數字m和n排成的數字mn和nm,如果mn<nm,那么我們應該輸出nm,也就是m應該排在n的后面,也就是m<n。反之,如果nm<mn,m排在n的前面,n<m。如果mn==mn,m等於n。 比較函數的定義是本解決方案的關鍵。這道題其實就是希望我們能找到一個排序規則,根據這個規則排出來的數組能排成一個最大的數字。例如一個正整數序列31,3;則313<331,所以排序時結果為3,31.若要用js代碼實現只需重寫sort方法的比較函數即可。

javascript代碼實現如下:

function getResortMax() {
        var arr = [];
        //將整數序列轉換為字符串數組
        for (var i = 0; i < arguments.length; i++) {
            arr.push(arguments[i].toString());
        }
        //重寫sort排序方法
        arr.sort(function (a, b) {
            if (a + b > b + a) {//a應該排在b前,所以return -1
                return -1;
            } else if (b + a > a + b) {//a應該排在b后面,所以return 1;
                return 1;
            } else {
                return 0;
            }
        });
        return arr.join("");
    }

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM