LeetCode--571. 给定数字的频率查询中位数

news/2024/10/25 9:25:58/

文章目录

  • 1 题目描述
  • 2 测试用例
  • 3 解题思路
    • 3.2 解法 1
  • 相似题目

1 题目描述

表: Employee

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| id           | int     |
| company      | varchar |
| salary       | int     |
+--------------+---------+

id 是该表的主键列 (具有唯一值的列)
该表的每一行表示公司和一名员工的工资
编写解决方案, 找出每个公司的工资中位数
任意顺序 返回结果表

2 测试用例

输入:
Employee 表:

+----+---------+--------+
| id | company | salary |
+----+---------+--------+
| 1  | A       | 2341   |
| 2  | A       | 341    |
| 3  | A       | 15     |
| 4  | A       | 15314  |
| 5  | A       | 451    |
| 6  | A       | 513    |
| 7  | B       | 15     |
| 8  | B       | 13     |
| 9  | B       | 1154   |
| 10 | B       | 1345   |
| 11 | B       | 1221   |
| 12 | B       | 234    |
| 13 | C       | 2345   |
| 14 | C       | 2645   |
| 15 | C       | 2645   |
| 16 | C       | 2652   |
| 17 | C       | 65     |
+----+---------+--------+

输出:

+----+---------+--------+
| id | company | salary |
+----+---------+--------+
| 5  | A       | 451    |
| 6  | A       | 513    |
| 12 | B       | 234    |
| 9  | B       | 1154   |
| 14 | C       | 2645   |
+----+---------+--------+

3 解题思路

  1. 中位数 (median) 是将一组数据按照从小到大的顺序排列 (或者从大到小的顺序也可以) 之后处在数列中点位置的数值, 是典型的位置平均数

如果数列是奇数, 中位数等于第 (n+1)/2 个数, 也就是 median = (n+1)/2
如果数列是偶数, 中位数等于第 n/2 和 n/2+1 个数的平均数, 也就是 median = n/2 or median = n/2 + 1
总结起来就是: 中位数在奇数或偶数的范围n/2 <= median <= n/2 + 1, 包含了 n/2, (n+1)/2, n/2 + 1

  1. 使用 row_number() 函数按照公司 company 分组对工资 salary 进行排名, MySQL 排名函数
select id,company,salary,row_number() over (partition by company order by salary) as companySalaryRank,count(id) over (partition by company)                    as n
from Employee

查询结果

idcompanysalarycompanySalaryRankn
2A34126
5A45136
6A51346
1A234156
4A1531466
3A1516
12B23436
10B134566
11B122156
9B115446
7B1526
8B1316
17C6515
13C234525
14C264535
15C264545
16C265255
  1. 在公司的工资排名结果中查找中位数
select id,company,salary
from (select id,company,salary,row_number() over (partition by company order by salary) as companySalaryRank,count(id) over (partition by company)                    as nfrom Employee) as e
where companySalaryRank >= n / 2and companySalaryRank <= n / 2 + 1;

查询结果

idcompanysalary
5A451
6A513
12B234
9B1154
14C2645

3.2 解法 1

按照解题思路, 在 MySQL 中的 sql:

select id,company,salary
from (select id,company,salary,row_number() over (partition by company order by salary) as companySalaryRank,count(id) over (partition by company)                    as nfrom Employee) as e
where companySalaryRank between n / 2 and n / 2 + 1;

相似题目

LeetCode–571. 给定数字的频率查询中位数


http://www.ppmy.cn/news/1200028.html

相关文章

使用new_zeros和zeros_like分别返回与输入相同尺寸/类型/device的tensor和ndarray

torch.Tensor.new_zeros(size, dtypeNone, deviceNone) 返回尺寸为size的全为0的tensor&#xff0c;默认&#xff0c;返回的tensor与该tensor具有相同的dtype和device&#xff0c;可以用于在模型训练过程中创建新tensor&#xff0c;并保证该tensor在对应的device上 1&#xff0…

Go 中的反射

本教程有以下部分。 什么是反射&#xff1f;需要检查变量并查找其类型吗&#xff1f;反射包 反射类型和反射值反射.KindNumField() 和 Field() 方法Int() 和 String() 方法 完整的程序是否应该使用反射&#xff1f; 现在让我们一一讨论这些部分。 什么是反射&#xff1f; 反…

办公套件全家桶 Office2019 mac中文版新功能

office 2019 mac是 Microsoft office 应用程序套件的最新版本。它包括流行的软件&#xff0c;例如 Microsoft Word、Excel、PowerPoint 和 Outlook&#xff0c;office 2019 比其前身有许多新功能和改进&#xff0c;包括增强的协作工具、与 OneDrive 和 SharePoint 等云服务的更…

由一个自动化脚本运维展开的思考

今天分享一个思路&#xff0c;如何通过脚本集中管理程序的启停。减少人工的介入。 例子 好的&#xff0c;这里有一个基本的shell脚本示例&#xff0c;你可以根据你的具体需求进行修改。 启动脚本&#xff08;start.sh&#xff09;&#xff1a; #!/bin/bash ./test_server_1…

ACTIVE_MQ学习

ActiveMq学习①___入门概述https://blog.csdn.net/qq_45905724/article/details/131796502 ActiveMq学习②__安装与控制台https://blog.csdn.net/qq_45905724/article/details/133893214 ActiveMq学习③___Java编码实现ActiveMQ通讯https://blog.csdn.net/qq_45905724/articl…

每个程序员都应该自己写一个的:socket包装类

每个程序员都应该有自己的网络类。 下面是我自己用的socket类&#xff0c;支持所有我自己常用的功能&#xff0c;支持windows和unix/linux。 目录 客户端 服务端 非阻塞 获取socket信息 完整代码 客户端 作为socket客户端&#xff0c;只需要如下几个功能&#xff1a; //…

SM5102 3.7V 锂电池转干电池充放管理芯片

SM5102 3.7V 锂电池转干电池充放管理芯片 简介 &#xff1a; SM5102 是一款锂电池充放电管理专用芯片。充电工作时, 可以为 3.7V 锂电池进行充电&#xff0c;电流最高可配置1A。放电工作时&#xff0c;采用开关频率 1MHz同步降压转换器进行放电&#xff0c;放电电流可以达到3…

CATIA环境编辑器用不了时创建项目快捷方式

CATIA环境编辑器用不了时创建项目快捷方式 一、参考适用情况示例二、 解决步骤(一) 先正确放置winb_64部署包(二) 添加环境文件(三) 修改加入的环境文件(四) 复制本机CATIA快捷方式后重命名(五) 修改快捷方式目标的值 一、参考适用情况示例 二、 解决步骤 (一) 先正确放置winb…