算法:非暴力算法求一個數組中重複次數最多的數 js實現

某個公司的前端面試題。話說我也是走投無路,其他職位實在不好找,竟然回頭去看前端開發。我倒不是不想做前端,只不過覺得有負我這兩年的所學啊。哎!!!!

問題:已知一個數組,求裏面重複次數超過 數組長度/k 的數。數組的第一位是k值,其餘是數字成員。不許使用時間複雜度爲mn的實現方式。

var C = [9, 2, 5, 2, 4, 3, 3, 9, 6, 3, 4, 4, 3, 5, 0];

function getSame(_a) {
    let k = _a[0];
    let a = _a.slice(1);
    let b = [];
    let count = 0; //最多重複次數
    let countIndex = 0; //投票id
    // 獲取每個票的重複次數
    for (i = 0; i < a.length; i++) {
        b[i] = 0;
        b[a[i]]++;
    }
    // console.log(b);
    count = b[0]; //初始
    for (let i = 0; i < b.length; i++) {
        if (b[i] > count) { //最多的票數和id
            count = b[i];
            countIndex = i;
        }
    }
    return count >= a.length / k ? countIndex : "no one";
}
console.log("the most number is:" + getSame(C));

原理:
就是做一個映射,對應數組成員的重複數字和關係。沒什麼特別的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章