leetcode 算法题1086 (简单286) 前五科的均分

leetcode 算法题1086 (简单286) 前五科的均分

  • 题目介绍
给你一个不同学生的分数列表,
请按 学生的 id 顺序 返回每个学生 最高的五科 成绩的 平均分。
对于每条 items[i] 记录,
items[i][0] 为学生的 id,items[i][1] 为学生的分数。
平均分请采用整数除法计算。
  • 示例

输入:[[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[2,100],[2,76]]
输出:[[1,87],[2,88]]
解释:id = 1 的学生平均分为 87。id = 2 的学生平均分为 88.6。但由于整数除法的缘故,平均分会被转换为 88。

  • 提示
  1. 1 <= items.length <= 1000
  2. items[i].length == 2
  3. 学生的 ID 在 1 到 1000 之间
  4. 学生的分数在 1 到 100 之间
  5. 每个学生至少有五个分数
  • 解法一
/**
 * @param {number[][]} items
 * @return {number[][]}
 */
var highFive = function(items) {
    let map = {}, i = 0, temp = [];
    while(i < items.length) {
      if(map[items[i][0]]) {
        fixHigh(map[items[i][0]], items[i][1]);
      } else {
        map[items[i][0]] = [items[i][1]];
      }
      i++;
    }
    for(let key in map) {
      temp.push([parseInt(key), getAverage(map[key])]);
    }
    return temp;
};

const getAverage = nums => Math.floor(nums.reduce((sum, num) => sum + num) / nums.length);


const fixHigh = (list, score) => {
  if(list.length < 5) {
    list.push(score);
  } else {
    if(score > list[0]) {
      list[0] = score;
    }
  }
  list.sort((n1, n2) => n1 - n2);
}

执行用时 : 76 ms, 在所有 JavaScript 提交中击败了100.00%的用户

内存消耗 : 37.4 MB, 在所有 JavaScript 提交中击败了100.00%的用户

  • 解法二
/**
 * @param {number[][]} items
 * @return {number[][]}
 */
var highFive = function(items) {
    let map = {}, i = 0, temp = [];
    while(i < items.length) {
      if(map[items[i][0]]) {
        map[items[i][0]].push(items[i][1]);
      } else {
        map[items[i][0]] = [items[i][1]];
      }
      i++;
    }
    for(let key in map) {
      let list = map[key];
      list.sort((n1, n2) => n2 - n1);
      console.log(list)
      temp.push([parseInt(key), Math.floor((list[0] + list[1] + list[2] + list[3] + list[4]) / 5)]);
    }
    return temp;
};

执行用时 : 108 ms, 在所有 JavaScript 提交中击败了52.63%的用户

内存消耗 : 37.8 MB, 在所有 JavaScript 提交中击败了100.00%的用户

你可能感兴趣的:(leetcode,#,leetcode,简单)