某個公司的前端面試題。話說我也是走投無路,其他職位實在不好找,竟然回頭去看前端開發。我倒不是不想做前端,只不過覺得有負我這兩年的所學啊。哎!!!!
問題:已知一個數組,求裏面重複次數超過 數組長度/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));
原理:
就是做一個映射,對應數組成員的重複數字和關係。沒什麼特別的。