某个公司的前端面试题。话说我也是走投无路,其他职位实在不好找,竟然回头去看前端开发。我倒不是不想做前端,只不过觉得有负我这两年的所学啊。哎!!!!
问题:已知一个数组,求里面重复次数超过 数组长度/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));
原理:
就是做一个映射,对应数组成员的重复数字和关系。没什么特别的。