拼多多24届暑期实习真题

1. 题目描述:

多多开了一家自助餐厅,为了更好地管理库存,多多君每天需要对之前的课流量数据进行分析,并根据客流量的平均数和中位数来制定合理的备货策略。

2. 输入输出描述:

输入描述:

输入共两行:

第一行一个整数N,表示餐厅营业总天数(0 < N<=200,000),

第二行共N个整数,分别表示第i天的课流量Ri(0 <= Ri <= 1,000,000);

输出描述:

输出共两行:

第一行长度为N,其中第i个值表示前i天客流量的平均值。

第二行长度为N,其中第i个值表示前i天客流量的中位数。

示例1:(输入输出示例仅供调试,后台判题数据一般不包含示例。)

输入:

5

1 2 3 4 10

输出:

1 2 2 3 4

1 2 2 3 3

3. 题解 

思想:

1) 求中位数的思路见力扣295题:数据流的中位数​​​​​​

a. 建立一个大根堆,一个小根堆。大根堆存储小于当前中位数,小根堆存储大于等于当前中位数。且小根堆的大小永远都比大根堆大1或相等。
b. 根据上述定义,我们每次可以通过小根堆的堆顶或者两个堆的堆顶元素的平均数求出中位数。
c. 维护时,如果新加入的元素大于等于当前的中位数,则加入小根堆;否则加入大根堆。然后如果发现两个堆的大小关系不满足上述要求,则可以通过弹出一个堆的元素放到另一个堆中。

2)求平均值是采用前缀和。

3)  有个坑是向上取整。如果分母没有1.0 或者2.0就会变成int型,这时候你再用ceil也不会有向上取整的效果了。因为是先变成了整数,再向上取整。 

C++代码:

#include <iostream>
#include <queue>
#include <cmath>
using namespace std;

int main() {
    int n;
    cin >> n;
    int R[n];
    for (int i = 0; i < n; i++) {
        cin >> R[i];
    }

    // 求前缀和
    int prefixSum[n];
    prefixSum[0] = R[0];
    for (int i = 1; i < n; i++) {
        prefixSum[i] = prefixSum[i - 1] + R[i];
    }

    // 计算平均值和中位数
    double avg[n];
    int median[n];
    //用两个堆维持中位数的位置,
    //down是一个大顶堆,存储小于等于中位数的值。
    //up是一个小顶堆,存储大于中位数的值。
    //down存储的数量最多比up多一个。(人为规定)。
    priority_queue<int> down;
    priority_queue<int, vector<int>, greater<int>> up;
    for(int i = 0; i < n; i++) {
        if (down.empty() || R[i] <= down.top()) {
            down.push(R[i]);
            if (down.size() > up.size() + 1) {
                up.push(down.top());
                down.pop();
            }
        } else {
            up.push(R[i]);
            if (up.size() > down.size()) {
                down.push(up.top());
                up.pop();
            }
        }
        if((down.size() + up.size()) % 2){
            median[i] = down.top();
        }else{
            median[i] = ceil((down.top()+up.top())/2.0);//向上取整
        }
        avg[i] = ceil(prefixSum[i]/(i + 1.0));//向上取整
    }

    // 输出结果
    for (int i = 0; i < n; i++) {
        cout << (int) avg[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < n; i++) {
        cout << median[i] << " ";
    }
    cout << endl;

    return 0;
}

Java代码:(ChatGPT转换的)

import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] R = new int[n];
        for (int i = 0; i < n; i++) {
            R[i] = sc.nextInt();
        }

        // 求前缀和
        int[] prefixSum = new int[n];
        prefixSum[0] = R[0];
        for (int i = 1; i < n; i++) {
            prefixSum[i] = prefixSum[i - 1] + R[i];
        }

        // 计算平均值和中位数
        double[] avg = new double[n];
        int[] median = new int[n];
        PriorityQueue<Integer> down = new PriorityQueue<>((a, b) -> b - a);
        PriorityQueue<Integer> up = new PriorityQueue<>();
        for (int i = 0; i < n; i++) {
            if (down.isEmpty() || R[i] <= down.peek()) {
                down.offer(R[i]);
                if (down.size() > up.size() + 1) {
                    up.offer(down.poll());
                }
            } else {
                up.offer(R[i]);
                if (up.size() > down.size()) {
                    down.offer(up.poll());
                }
            }
            if ((down.size() + up.size()) % 2 == 1) {
                median[i] = down.peek();
            } else {
                median[i] = (int) Math.ceil((down.peek() + up.peek()) / 2.0);
            }
            avg[i] = Math.ceil(prefixSum[i] / (i + 1.0));
        }

        // 输出结果
        for (int i = 0; i < n; i++) {
            System.out.print((int) avg[i] + " ");
        }
        System.out.println();
        for (int i = 0; i < n; i++) {
            System.out.print(median[i] + " ");
        }
        System.out.println();
    }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一 Go环境搭建

1. 下载地址 https://golang.google.cn/dl/ 傻瓜式安装&#xff0c;自动会配置path的变量&#xff0c;安装完成后可以使用go version 查看当前安装的版本 本文使用目前最新的1.20.2版本 2. 配置go环境 cmd控制栏打开输入以下命令&#xff08;如果cmd有问题可以尝试powershe…

Linux常用命令——基于Ubuntu22.04

本文介绍了一些Linux的常用命令。为了便于快速检索命令位置&#xff0c;文章二级标题都以“命令&#xff1a;命令的作用”展示&#xff0c;有些命令会先介绍命令的几个常用参数&#xff0c;然后结合具体的操作展示命令的使用。为了便于记忆&#xff0c;也会提到命令是由哪些短语…

【Go】Go语言开发环境安装

【Go】Go语言开发环境安装 导入 安装环境&#xff1a;Winowds 我现在是win7安装的&#xff0c;与win10整体步骤是一样的&#xff0c;只是部分显示的时候有点差异不影响&#xff1b; 【名词】 编译器&#xff1a;先将代码编译成可执行文件&#xff0c;再执行&#xff1b; —…

Gehpi的网络布局

Gehpi的网络布局1. 力引导布局2. 辅助布局布局是网络可视化中的重要概念&#xff0c;指将点和边通过某种策略进行排布&#xff0c;应尽可能满足以下4个原则&#xff1a; 节点均匀分布在有限的区域内避免边的交叉和弯曲保持边的长度一致整体布局能反映图内在的特性 Gephi的布局…

*9 set up 注意点

1、set up 执行的时机&#xff1a;beforeCreate 之前执行一次&#xff0c;this 是 undefined 2、set up 的参数&#xff1a; props&#xff1a;值为对象&#xff0c;组件外传递属性&#xff0c;内部声明并且接收属性 context&#xff1a;上下文对象&#xff0c;其内部包含三个…

SpringBoot-实用开发篇

SpringBoot开发实用篇开发实用篇中因为牵扯到SpringBoot整合各种各样的技术&#xff0c;所以在整合每一个技术之前&#xff0c;都会做一个快速的普及&#xff0c;这样的话内容整个开发实用篇所包含的内容就会比较多。在学习的时候&#xff0c;如果对某一个技术不是很清楚&#…

数据库体系结构概念--集中式数据库、分布式数据库

数据库模式 前言&#xff1a; 平时我们接触的‘数据库’一般指的是DBMS&#xff0c;数据库管理系统&#xff0c;DBMS是软件如&#xff1a;mysql、oracle、dm等等都是集中式数据库&#xff0c;但它们不能代表整个数据库&#xff0c;只是通过这些软件来管理相应的数据内容&#…

Request和Response的概述

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;输出优质文章⭐作者主页&#xff1a;︶ㄣ释然⭐如果觉得文章写的不错&#xff0c;欢迎点个关注&#x1f609;有写的不好的地方也欢迎指正&#xff0c;一同进步&#x1f601;Request和Respo…

学习java——②面向对象的三大特征

目录 面向对象的三大基本特征 封装 封装demo 继承 继承demo 多态 面向对象的三大基本特征 我们说面向对象的开发范式&#xff0c;其实是对现实世界的理解和抽象的方法&#xff0c;那么&#xff0c;具体如何将现实世界抽象成代码呢&#xff1f;这就需要运用到面向对象的三大…

Linux防火墙的关闭

查看防火墙的状态打开终端输入如下命令systemctl status firewalld如图所示&#xff1a;running表示防火墙目前处于打开状态输入命令进行关闭防火墙&#xff1a;systemctl stop firewalld如图所示正常的用户是没有权限的&#xff0c;需要输入管理员的密码才能够进行关闭防火墙。…

我在字节当主管:百次面试结果,总结一个刷掉99%求职者的问题!

我一个在大厂当主管的朋友&#xff0c;跟我说&#xff1a;“现在招性能测试太难了&#xff0c;当然不是说没人干&#xff0c;一开招聘信息就能收到一大把简历&#xff0c;其中不乏学历亮眼、背景出色、简历里各种高并发、大流量的项目经验的人才。问题在于&#xff0c;当你提出…

震撼,支持多模态模型的ChatGPT 4.0发布了

最近几个月&#xff0c;互联网和科技圈几乎ChatGPT刷屏了&#xff0c;各种关于ChatGPT的概念和应用的帖子也是围绕在周围。当去年年底ChatGPT发布的那几天&#xff0c;ChatGPT确实震撼到了所有人&#xff0c;原来AI还可以这么玩&#xff0c;并且对国内的那些所谓的人工智能公司…

exe反编译为.py文件

介绍公司以前的一个exe包&#xff0c;我们需要查看里面python源码&#xff0c;但是以前的py源码文件找不到&#xff0c;所以只能反编译&#xff0c;介绍一下反编译的过程。首先准备&#xff1a;pyinstxtractor.py这个文件&#xff0c;网上很多&#xff0c;自己下载准备查看二进…

可吸附分离金属离子的147597-66-8,p-SCN-Bn-NOTA信息概述

p-SCN-Bn-NOTA的基本信息&#xff1a;p-SCN-Bn-NOTA即&#xff0c;NOTA-p-NCS-Bn&#xff0c;又称NOTA-p-苯-NCS。C20H26N4O6S3HCl是NOTA衍生物&#xff0c;其分子量为559.9。属于大环化合物&#xff1b;大环化合物具有强非共价作用力、易于改性的特点&#xff0c;能用于吸附分…

正则表达式高阶技巧之匹配模式(使用python实现)

匹配模式介绍不区分大小写模式模式的指定方式应用单行模式多行模式注释模式其它模式修饰符的作用范围介绍 我们在正则中所说得匹配模式&#xff08;match mode&#xff09;&#xff0c;指的是匹配时使用的规则。设置特定的匹配模式&#xff0c;可能会改变对正则表达式的识别&a…

排序算法 - 冒泡排序

冒泡排序算法应该可以说是很经典的一种对数据进行排序的的算法了&#xff0c;甚至在很多的介绍算法的数据中&#xff0c;它可能还是放在最前面开始讲解的。 冒泡排序算法到底是咋样的呢&#xff1f;冒泡这个说法又是怎么得来的呢&#xff1f; 首先先理解一下冒泡算法的实现原理…

【计算机组成原理 - 第一章】计算机系统概论(完结)

本章参考王道考研相关课程&#xff1a; 【2021版】1.2.1_计算机硬件的基本组成_哔哩哔哩_bilibili 【2021版】1.2.2_认识各个硬件部件_哔哩哔哩_bilibili 【2021版】1.2.3_计算机系统的层次结构_哔哩哔哩_bilibili 【2021版】1.3_计算机的性能指标_哔哩哔哩_bilibili 目录 一、…

Vue3做出B站【bilibili】 Vue3+TypeScript+ant-design-vue【快速入门一篇文章精通系列(一)前端项目案例】

本项目分为二部分 1、后台管理系统&#xff08;用户管理&#xff0c;角色管理&#xff0c;视频管理等&#xff09; 2、客户端&#xff08;登录注册、发布视频&#xff09; Vue3做出B站【bilibili】 Vue3TypeScriptant-design-vue【快速入门一篇文章精通系列&#xff08;一&…

20年程序员生涯,读了200多本技术书,挑了几本精华好书分享给大家

不知不觉已经又走过了20个年头了&#xff0c;今年已经44了&#xff0c;虽然我已经退休在家&#xff0c;但一直都保持着读书的习惯&#xff0c;我每年平均要读10本技术书籍&#xff0c;保持不让自己的技术落伍。 这些年读的技术书不下200本&#xff0c;很多好书我都会保存在家&a…

操作技巧 | 在Revit中借用CAD填充图案的方法

在建模过程中&#xff0c;有时需要达到多种填充效果&#xff0c;而CAD中大量的二维填充图案&#xff0c;便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…
最新文章