首页 > 其他分享 >中位数

中位数

时间:2024-08-05 21:27:27浏览次数:11  
标签:main cout int namespace cin 中位数 include

  • 题目

  • 题解

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;
		}
	}	
}

这样就好啦!

标签:main,cout,int,namespace,cin,中位数,include
From: https://www.cnblogs.com/jumaoxiangrijui/p/18344099

相关文章

  • CF1993D-二分+dp处理中位数
    CF1993D-二分+dp处理中位数大致题意给定两个正整数n和k以及另一个由n个整数组成的数组a。在一次操作中,可以选择a的任意一个大小为k的子数组,然后将其从数组中删除,而不改变其他元素的顺序。更正式地说,假设$(l,r)$是对子数组\(a_l,a_{l+1},…,a_r\)的操作,使得\(r......
  • (leetcode学习)295. 数据流的中位数
    中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。例如arr=[2,3,4] 的中位数是3 。例如 arr=[2,3]的中位数是(2+3)/2=2.5。实现MedianFinder类:MedianFinder()初始化MedianFinder 对象。voidaddN......
  • 美团一面:如何在 100 亿数据中找到中位数?
     海量数据中找到中位数,内存肯定是无法一次性放下这么多数据的中位数定义:数字排序之后,位于中间的那个数。比如将100亿个数字进行排序,排序之后,位于第50亿个位置的那个数就是中位数。桶排序1)创建多个小文件桶,设定每个桶的取值范围,然后把海量数据元素根据数值分配......
  • 在python中查找区间数据的中位数
    我正在探索不同的python库,我想知道如何找到分组数据集的近似中值。这里有一个表格供参考。年龄频率1-1012310-203502......
  • 中位数(权值线段树版)
    中位数题目描述给定一个长度为NNN的非负整数序列AAA,对于前奇数......
  • P7382 [COCI2018-2019#6] Simfonija (中位数)
    P7382[COCI2018-2019#6]Simfonija中位数不妨设\(C_i=A_i-B_i\),那么操作后的代数式可以写成:\[\sum\limits_{i=1}^n|C_i+x|\]如果\(k=0\),那么\(x\)的取值就是一个经典问题了,即\(C\)序列的中位数(偶数取中间任意)。如果\(k\ne0\),要使答案最小,就是将\(k\)个数的代价变......
  • 中位数
     importjava.util.*;​publicclassMain{    staticint[]a;  staticint[]b;  static intl;  publicstaticvoidmain(String[]args){    Scannersc=newScanner(System.in);    l=sc.nextInt();    a=......
  • C++算法实践04-寻找两个正序数组的中位数
    一、题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nu......
  • 数理统计(数值修约、0.5修约、0.2修约、有效数字运算、平均值、中位数、极差、标准差
    数理统计(数值修约、0.5修约、0.2修约、有效数字运算、平均值、中位数、极差、标准差、变异系数)原文:数理统计(数值修约、0.5修约、0.2修约、有效数字运算、平均值、中位数、极差、标准差、变异系数)_修约到0.5怎么修约-CSDN博客一、数值修约:口诀:四舍六入五考虑,五后非零则进......
  • Leecode热题100---二分查找--4:寻找两个正序数组的中位数
    题目:给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。解法1、暴力解法(归并)思路:合并nums1,nums2为第三个数组排序第三个数组按下标,找出中位数classSolution{public: doublefindMedianSortedArrays(vec......