中位数

  • 题目

  • 题解

1. 首先我们可以想到,既然需要输出(n+1)/2次,所以我们可以每次排序一下,并在其为奇数的时候输出它们中间的数。

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int N;
int a[100001];
int main() {	cin >> N;	for (int i = 0; i <N; i++) {cin >> a[i];sort(a, a + i+1 );if (i % 2 == 0) {cout << a[i/2] << endl;}}	
}

但这样肯定会超时因为每次都要排序一下。

2.那么就需要进行优化,可以想到如果能够直接插入到相应的位置就好了。

这样就很容易想到用stl容器的vector,insert()刚好有插入的功能

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int N;
int a;
vector<int>v;
int main() {	cin >> N;	cin >> a;v.push_back(a);cout << v[0] << endl;for (int i = 1; i <N; i++) {cin >> a;	int s = 0;for (int j = 0; j < v.size(); j++) {if (a > v[j])s = j+1;}v.insert(v.begin() + s, a);if (i % 2 == 0) {cout << v[i/2] << endl;}}	
}

但是这里仍然使用for循环,大大增加了时间复杂度。

3.所以,需要把这里的循环也优化掉,那么很自然的想到了二分。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int N;
int a;
vector<int>v;
int main() {	cin >> N;	for (int i = 0; i <N; i++) {cin >> a;	v.insert(lower_bound(v.begin(), v.end(), a), a);if (i % 2 == 0) {cout << v[i/2] << endl;}}	
}

这样就好啦!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity Gyro Camera ---- 传感器控制摄像头旋转 + 正北校准 (纯原生支持Android+IOS,无需安装ARKit,ARCore等插件)

Unity Gyro Camera 传感器控制摄像头旋转 + 正北校准 纯原生支持Android+IOS,无需安装ARKit,ARCore等插件这篇文章主要介绍如何利用手机原生的传感器,控制摄像头的旋转,最终可以实现AR或者VR的摄像头旋转控制问题提出 虽然,目前有一些用手机传感器控制虚拟摄像头旋转的方案…

浮点数的表示及IEEE754标准

浮点数的表示浮点数的规格化IEEE754标准 移码IEEE754这里有一个需要特别注意的地方,IEEE754中,尾数个位上的1是隐含的IEEE 的阶码保留了全0和全1来表示特殊的状态,所以阶码最大值的真值为127,对应机器数为1111 1110,阶码最小值的真值为-126,对应的机器数为0000 0001

记一次STM32使用I2C PinRemap引脚重映射出现卡死现象

在移植WouoUI到STMF103C8 BluePill board时,发现会出现上电卡死在I2C检查函数(如下图)本人遇到的现象:在习惯使用的(SWI2C / HWI2C)@(PB8->SCL PB9->SDA)连接OLED的情况下,大多数情况使用江科大的SWI2C,一切正常。今天跑某开源基于u8g2库的UI框架 WouoUI(HWI2C)…

rancher2.5.9部署flink1.13.1集群问题求教

下面是我在rancher页面配置flink的yaml: apiVersion: batch/v1 kind: Job metadata: name: flink-jobmanager namespace: flink-resource spec: template: metadata: labels: app: flink component: jobmanager spec: restartPolicy: OnFailure containers: - name: jobmanage…

【报错提示】java.lang.RuntimeException: Cant create handler inside thread

​ 报错提示 遇到一个报错: java.lang.RuntimeException: Cant create handler inside thread Thread[OkHttp https://a.fxltsbl.com/...] that has not called Looper.prepare() 分析1. 这个报错提示是在一个没有调用 Looper.prepare() 的线程中尝试创建一个 Handler 对象。…

洛谷-P9830 题解

思路分析 分析样例:见红线,长宽各为 2,存在格点;黄线长 2 宽 3,没有格点。 考虑延长黄线使得长 4 宽 6,发现有格点。思考格点,如果长和宽都可以被分成 \(p\times l\) 的格式,则存在格点。那么,就能想出: 推论 1:对于 \((0 \ , \ 0)\) 和 \((x \ , \ y)\) 之间没有格…

kubernetes-存储卷与持久化详解

目录背景volume介绍emptyDirHostPathNFSconfigMapSecretPersistentVolume介绍PV回收策略PV访问策略基于nfs或nas创建pv创建hostpath类型的pvPV的状态PersistentVolumeClaim创建pvc与pv进行绑定使用pvc动态存储storageclass创建目录nfs添加授权目录创建yaml 背景 容器部署过程中…

如何通过视频剪辑软件修复原始视频声音小的问题 All In One

如何通过视频剪辑软件修复原始视频声音小的问题 All In One 视频后期处理 (剪映)如何通过视频剪辑软件修复原始视频声音小的问题 All In One视频后期处理 (剪映)demos视频声音太小了, 音量开到 100%,还是听不清,建议加个麦,或者后期处理视频的时候提高音量https://www.bilib…

kettle从入门到精通 第八十四课 ETL之kettle kettle中Get data from XML使用实战教程

场景:解析xml文件或者内容解析出其中某些字段。 本来想着这个步骤使用起来比较简单,就没有梳理成文,结果群里的小伙伴为了使用这个步骤折腾了一下午。故有了此文。 在开始学习之前我们一起来学习下xml命名空间的相关知识,为下文展开做基础铺垫。 1、xml命名空间XML 的命名空…

双边滤波

双边滤波(Bilateral Filtering)是一种非线性的图像处理方法,主要用于图像的平滑同时保持边缘清晰。与传统的低通滤波器(如均值滤波或高斯滤波)不同,双边滤波不仅考虑了空间上的邻近性,还考虑了像素值的相似性,这使得它能够在去除噪声的同时较好地保留图像的边界和细节。…

用项目详细讲讲vue3路由

1.【对路由的理解】 Vue Router 是 Vue.js 官方的路由管理器,它用于构建单页面应用(SPA),允许我们在不同的页面间进行导航,而无需刷新整个页面。 路由配置文件代码如下:import {createRouter,createWebHistory} from vue-router import Home from @/pages/Home.vue impo…

多态的概念,前提,注意事项以及访问成员的特点 day09

多态:某一个事物在不同状态下的多种状态举例:1、学生是人,老师是人,医生是人。2、汽态的水是水,固态的水是水,液态的水是水在java中要实现多态的话,需要有3个前提:1、必须要有继承关系2、要有方法的重写(思考可否不重写?)不是必须要重写的,重写可以体现子类的专属特…