算法题目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)
上一篇下一篇

猜你喜欢

热点阅读