算法:非暴力算法求一个数组中重复次数最多的数 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));

原理:
就是做一个映射,对应数组成员的重复数字和关系。没什么特别的。

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