当前位置: 首页 > news >正文

算法 - 查找众数及中位数

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

  1. 众数是指一组数据中出现次数量多的那个数,众数可以是多个。
  2. 中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数。
  3. 查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数。

输入描述

  • 输入一个一维整型数组,数组大小取值范围 0<N<1000,数组中每个元素取值范围 0<E<1000

输出描述

  • 输出众数组成的新数组的中位数

用例

输入10 11 21 19 21 17 21 16 21 18 15
输出21
输入2 1 5 4 3 3 9 2 7 4 6 2 15 4 2 4
输出3
输入5 1 5 3 5 2 5 5 7 6 7 3 7 11 7 55 7 9 98 9 17 9 15 9 9 1 39
输出7

题目解析

感觉这题就是一个逻辑题,不需要什么算法。

我的思路是这样的:

1、将输入字符串切割为数组A

2、新建一个空对象,将数组元素作为空对象的属性,属性初始值为1,然后遍历数组数组元素,每遍历到一个元素,对应的对象属性值就++,这样就可以统计到数组元素中每个元素的重复次数了

3、获取最大次数,这里通过Object.values获取到对象的属性值组成的数组B,然后通过Math.max来得到属性值中最大值max

4、遍历对象属性,将属性值等于最大值max的属性名(即数组A元素)取出存入一个临时数组arr中,并将临时数组arr中的元素map为数字类型

5、由于第4步并没有放入重复元素,而是每个重复元素只放一个,因此arr中相当于众数去重数组,此时如果arr.length = 1,说明只有一个众数,因此无论实际arr.length * max 是奇偶,最后结果都是这个众数

6、如果arr中有多个众数,则根据arr.length * max判断奇偶,若为奇数,则最终中数为arr[Math.floor(arr.len / 2)],若为偶数,则最终中数为(arr[len / 2] + arr[len / 2 - 1]) / 2

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  const obj = {};

  const vals = line.split(" ").sort((a, b) => a - b);
  vals.forEach((ele) => {
    obj[ele] ? obj[ele]++ : (obj[ele] = 1);
  });
  const max = Math.max.apply(null, Object.values(obj));
  let arr = [];
  for (let key in obj) {
    if (obj[key] === max) {
      arr.push(key);
    }
  }

  arr = arr.map((ele) => parseInt(ele));
  const len = arr.length;
  if (len === 1) return console.log(arr[0]);

  if ((len * max) % 2 === 0) {
    return console.log((arr[len / 2] + arr[len / 2 - 1]) / 2);
  } else {
    return console.log(arr[Math.floor(len / 2)]);
  }
});

相关文章:

  • 网站模板设计教程/西地那非片
  • 网站建设seo策略有哪些/企业网络营销案例
  • 干果坚果网站建设/餐饮品牌全案策划
  • 做线上网站的风险分析/怎么建网站教程图解
  • 设计医院网站建设/上海网站建设公司排名
  • wordpress 实时更新/爱站网关键词长尾挖掘
  • Hook--2.useRef、useCallback、useContext、useReducer
  • 实例展示如何使用JMeter操作Elasticsearch
  • leetcode 474一和零
  • 2022年全国大学生数学建模美赛E题NPP数据获取
  • UG12.0无法正常启动0xc000007b修复教程
  • Linux入门基本命令的使用。
  • 刷爆leetcode第六期 0017
  • 一、CNN奠基作——AlexNet
  • STM32:PWM驱动舵机
  • 云物理机ironic对接ceph云盘ceph-iscsi-gateway
  • 阿里巴巴面试题- - -多线程并发篇(四十一)
  • C中常见的字符函数和字符串函数讲解