算法题目6:挑选标语
2020-06-11 本文已影响0人
玲儿珑
题目:某市马上要举办运动会了,组委会决定通过网络征集的方式来决定大会标语。有m条标语参加评 选,共有n人参与投票,每人投一票,规定采用得票超过 n/k 的标语(假设只有一条标语满足要 求)。请你写一个程序帮助小安挑出胜出的标语的序号。
输入:
一共 n+1 个整数,用空格分隔。第一个整数是 k,第二个整数开始每个数代表每个投票上选择的 标语的序号(大于 0 小于 2147483647 的整数)。
输出:
会被采用的标语的序号。
样例输入:
3122
样例输出:
2
提示:
暴力 O(mn)的方法会视为错误
实现:
function select (n) {
let k = 3
let arr = [1, 2, 2, 3, 5]
// for (let i = 0; i < n; i++) {
// arr.push(Math.floor(Math.random()*10))
// }
let obj = {}
for (let i = 0; i < arr.length; i++) {
if ( obj[arr[i]] ) {
obj[arr[i]]++
} else {
obj[arr[i]] = 1
}
}
let arr_r = []
let d = Math.ceil(n/k)
for (const k in obj) {
if ( obj[k] >= d ) {
arr_r.push(k)
}
}
return arr_r
}
select (5)