​LeetCode解法汇总1093. 大样本统计

news2024/12/21 18:39:47

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

我们对 0 到 255 之间的整数进行采样,并将结果存储在数组 count 中:count[k] 就是整数 k 在样本中出现的次数。

计算以下统计数据:

  • minimum :样本中的最小元素。
  • maximum :样品中的最大元素。
  • mean :样本的平均值,计算为所有元素的总和除以元素总数。
  • median :
    • 如果样本的元素个数是奇数,那么一旦样本排序后,中位数 median 就是中间的元素。
    • 如果样本中有偶数个元素,那么中位数median 就是样本排序后中间两个元素的平均值。
  • mode :样本中出现次数最多的数字。保众数是 唯一 的。

以浮点数数组的形式返回样本的统计信息 [minimum, maximum, mean, median, mode] 。与真实答案误差在 10-5 内的答案都可以通过。

示例 1:

输入:count = [0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
输出:[1.00000,3.00000,2.37500,2.50000,3.00000]
解释:用count表示的样本为[1,2,2,2,3,3,3,3]。
最小值和最大值分别为1和3。
均值是(1+2+2+2+3+3+3+3) / 8 = 19 / 8 = 2.375。
因为样本的大小是偶数,所以中位数是中间两个元素2和3的平均值,也就是2.5。
众数为3,因为它在样本中出现的次数最多。

示例 2:

输入:count = [0,4,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
输出:[1.00000,4.00000,2.18182,2.00000,1.00000]
解释:用count表示的样本为[1,1,1,1,2,2,3,3,3,4,4]。
最小值为1,最大值为4。
平均数是(1+1+1+1+2+2+2+3+3+4+4)/ 11 = 24 / 11 = 2.18181818…(为了显示,输出显示了整数2.18182)。
因为样本的大小是奇数,所以中值是中间元素2。
众数为1,因为它在样本中出现的次数最多。

提示:

  • count.length == 256
  • 0 <= count[i] <= 109
  • 1 <= sum(count) <= 109
  •  count 的众数是 唯一 的

解题思路:

/**

* 最小,最大,平均值,最多都比较简单,重点是中位数。

* 因为数量很多,我们挨个去统计肯定不合适,

* 所以我们首先可以总数量,然后分别求matchleft和matchright代表左右的中位数,如果是基数的话matchright=matchright。

* 然后我们不断的sum去减掉count[i]的值,当num <= matchright时,说明已经走到了右侧的中位数,这时候记录其值到medianValue。num <= matchleft时也是一样。

* 最后medianValue/2就是我们的预期中位数。

*/

 

代码:

#include <iostream>
#include <map>
#include <list>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

/**
 * 最小,最大,平均值,最多都比较简单,重点是中位数。
 * 因为数量很多,我们挨个去统计肯定不合适,
 * 所以我们首先可以总数量,然后分别求matchleft和matchright代表左右的中位数,如果是基数的话matchright=matchright。
 * 然后我们不断的sum去减掉count[i]的值,当num <= matchright时,说明已经走到了右侧的中位数,这时候记录其值到medianValue。num <= matchleft时也是一样。
 * 最后medianValue/2就是我们的预期中位数。
 */
class Solution
{
public:
    vector<double> sampleStats(vector<int> &count)
    {
        vector<double> list;
        double minValue = -1;
        double maxValue = -1;
        double meanValue = 0;
        double medianValue = 0;
        double modeValue = 0;
        // 最大数量
        int maxNum = 0;
        // 总数量
        int num = 0;
        // 总的累加值
        double sum = 0;
        for (int i = 0; i < count.size(); i++)
        {
            if (count[i] == 0)
            {
                continue;
            }
            num += count[i];
            sum += (count[i] * (long)i);
            maxValue = i;
            if (minValue == -1)
            {
                minValue = i;
            }
            if (count[i] > maxNum)
            {
                modeValue = i;
                maxNum = count[i];
            }
        }
        meanValue = sum / num;

        // 求中位数
        int matchleft = 0;
        int matchright = 0;
        if (num % 2 == 0)
        {
            matchleft = num / 2 - 1;
            matchright = num / 2;
        }
        else
        {
            matchleft = num / 2;
            matchright = num / 2;
        }

        for (int i = 0; i < count.size(); i++)
        {
            num -= count[i];
            if (num <= matchright)
            {
                medianValue += i;
                matchright = -1;
            }
            if (num <= matchleft)
            {
                medianValue += i;
                break;
            }
        }
        medianValue = medianValue / 2;
        list.push_back(minValue);
        list.push_back(maxValue);
        list.push_back(meanValue);
        list.push_back(medianValue);
        list.push_back(modeValue);
        return list;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/633016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次虚拟机centos7系统崩溃恢复记录

前两天&#xff0c;因为单独断开电源测试网络&#xff0c;结果不知道为什么&#xff0c;两台虚拟机中一台就出现紧急状态&#xff0c;看日志是下面情况 通过网上一些资料&#xff0c;说可以通过xfs_repair -v -L /dev/dm-0来修复&#xff0c;但这次我这里没有相关 看这个mappe…

【Docker】docker部署前Springboot-vue后端分离项目【实战篇】

文章目录 1、docker 安装jdk2、docker 安装mysql通过Docker命令进入Mysql容器内部初始化数据sqlDbx连接查看 3、docker build构建后端镜像修改配置数据库JDBC链接IP为虚拟机服务器IPmaven clean package打包后端jar并上传到服务器编写Dockfilebuild 构建查看构建的后端镜像app …

AAOS系列之音量设置

文章目录 前言UI 处理流程音量键的响应流程AudioService设置音量流程AAOS音量条选项总结 前言 AAOS音量设置内容可以分为几个部分 音量的ui响应流程legacy模式dynamic模式通过按键进行设置 AAOS 音量设置比通用的Android系统复杂&#xff0c;表现在两个方面。首先是UI响应上…

chatgpt赋能python:如何取出带有4的整数

如何取出带有4的整数 Python是一门功能强大的编程语言&#xff0c;可以轻松解决复杂的编程问题。在本文中&#xff0c;我们将介绍如何使用Python编程语言从一个整数列表中取出所有带有4的整数。我们将从介绍如何创建一个整数列表开始&#xff0c;然后编写Python代码以实现我们…

Unreal 5 实现丢弃武器功能

之前实现了物品的拾取功能&#xff0c;但是没有实现丢弃功能&#xff0c;这一篇讲一下我是如何实现丢弃功能的。 丢弃功能的逻辑是&#xff1a;拾取物品时&#xff0c;需要使用拾取的物品进行类的实现&#xff0c;所以&#xff0c;我们需要把数据存储到拾取的物品上&#xff0c…

4.DIY可视化-拖拽设计1天搞定主流小程序-后台设计幻灯

后台设计幻灯:本教程均在第一节中项目启动下操作 1.首页幻灯片php安装:phpthink安装&#xff1a; 2.数据库创建&#xff1a;幻灯片表&#xff1a;项目根目录下cmd :执行 : php think diygw:tableandapi oneHdp查看结果目录:访问url: http://one.com/one/api.hdp/list 3.界面增删…

【6.10 代随_53day】 最长公共子序列、不相交的线、最大子数组和

最长公共子序列、不相交的线、最大子数组和 最长公共子序列动态规划方法图解步骤代码 不相交的线动态规划方法 最大子数组和图解步骤代码 最长公共子序列 力扣连接&#xff1a;1143. 最长公共子序列&#xff08;中等&#xff09; 动态规划方法 确定递推公式 主要就是两大情况…

《横向联邦学习中 PCA差分隐私数据发布算法》论文算法原理笔记

论文地址&#xff1a;https://www.arocmag.com/article/01-2022-01-041.html 论文摘要 为了让不同组织在保护本地敏感数据和降维后发布数据隐私的前提下&#xff0c;联合使用 PCA进行降维和数据发布&#xff0c;提出横向联邦 PCA差分隐私数据发布算法。引入随机种子联合协商方…

九、进程程序替换

文章目录 一、进程程序替换&#xff08;一&#xff09;概念&#xff08;二&#xff09;为什么程序替换&#xff08;三&#xff09;程序替换的原理&#xff08;四&#xff09;如何进行程序替换1. execl2. 引入进程创建——子进程执行程序替换&#xff0c;会不会影响父进程呢? &…

016、元组(行)结构与dml操作

元组结构与dml操作 元组(行)结构行头信息Pageinspect工具DML操作InsertionDeletionUpdate块空间清理元组(行)结构 t_xmin保存插入此元组的事务的txid。这一行被哪个事务ID所修改t_xmax保存删除或更新此元组的事务的txid。如果此元组未被删除或更新,则t_xmax设置为0,这意味…

数据结构——堆(C语言实现)

文章目录 什么是堆堆的实现堆的结构定义堆的初始化接口堆的销毁接口堆的插入数据接口向上调整建堆接口判断堆是否为空堆的删除数据接口向下调整建堆接口获取堆顶数据获取堆的有效数据个数完整实现代码小结 堆排序堆排序的实现 关于建堆和堆排序时间复杂度的分析向下调整建堆向上…

STL之string

目录 string的基本实现一. string的基本架构二. 常用方法及实现1.初始化和清理a. 构造函数b. 析构函数c. swapd. 拷贝构造e. operator 2.成员访问a. operator[]b. sizec. c_str 3.迭代器iteratora. beginb. end 4.增删查改a. reserveb. resizec. insertd. push_backe. appendf.…

【连续介质力学】连续体运动学

简介 一个质点从t0出发&#xff0c;随着时间有不同的构形&#xff0c;运动的描述是运动学。 所以需要建立运动方程来表征连续体是如何演化及其性质&#xff08;例如位移、速度、加速度、质量密度、温度等&#xff09;如何随时间变化 初始构形 或者 参考构形&#xff1a; B …

Java反射与注解

文章目录 一、 注解1.简介2. 元注解3. 自定义注解 二、 反射1. 简介2. 理解Class类并获取Class实例3. 类的加载与初始化4. 类加载器ClassLoader5. 获取运行时类的完整结构6. 动态创建对象执行方法7. 反射操作泛型8. 反射操作注解 一、 注解 1.简介 Annotation是JDK5.0开始引入…

day52|动态规划13-子序列问题

子序列系列问题 300.最长递增子序列 什么是递增子序列&#xff1a; 元素之间可以不连续&#xff0c;但是需要保证他们所在位置是元素在数组中的原始位置。 dp数组dp[i]表示以nums[i]为结尾的最长递增子序列的长度。递归函数&#xff1a;dp[i] max(dp[j]1,dp[j])初始化条件&…

Linux常用命令——gpm命令

在线Linux命令查询工具 gpm 提供文字模式下的滑鼠事件处理 补充说明 gpm命令是Linux的虚拟控制台下的鼠标服务器&#xff0c;用于在虚拟控制台下实现鼠标复制和粘贴文本的功能。 语法 gpm(选项)选项 -a&#xff1a;设置加速值&#xff1b; -b&#xff1a;设置波特率&…

chatgpt赋能python:Python中如何取出字符串中的数字并赋予新的变量

Python 中如何取出字符串中的数字并赋予新的变量 在 Python 中&#xff0c;我们经常需要处理字符串&#xff0c;其中可能包含多种类型的数据。当我们需要获取字符串中的数字时&#xff0c;该怎样做呢&#xff1f;本文将介绍取出字符串中的数字的方法&#xff0c;并赋予新的变量…

chatgpt赋能python:Python利器之数字提取

Python 利器之数字提取 Python 是一门强大的编程语言&#xff0c;被广泛应用在数据分析、人工智能等领域。在很多数据分析的场景下&#xff0c;需要从文本中提取数字&#xff0c;本文将介绍如何使用 Python 快速提取文本中的所有数字。 使用正则表达式提取数字 正则表达式&a…

YOLOv7 模型融合

将两种训练模型的检测结果融合 首先需要两种模型&#xff0c;一个是yolov7原有的模型&#xff0c;另一个是你训练出来的模型 其中yolov7.pt是官方提供的模型&#xff0c;有80个类别 其中yolov7_3.7HRW.pt是我们自己训练的模型&#xff0c;有三个分类&#xff0c;举手、看书、写…

WPF开发txt阅读器6:用树形图管理书籍

txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录字体控件绑定书籍管理系统 TreeView控件 TreeView可以通过可折叠的节点来显示层次结构中的信息&#xff0c;是表达文件系统从属关系的不二选择&#xff0c;其最终效果如下 为了构建这个树…