1029 Median (25 分)笔记

1029 Median (25 分)笔记

我颓了,一定要看清题目的限制范围。

题意

给出两个递增的数列,找出这个数列合并之后(并从小到大排好序)的中位数

解题过程

掉坑里了,最后没忍住看了题解。才发现忽略了long long。
开始就是普通合并然后快排找出中位数,没过之后我以为是超时的原因
为了避免排序超时,我的想法是尽量减少排序的数的个数。
可以发现中位数在一组数据的中间,中位数后面的数其实不会对中位数造成什么影响。把肯定比中位数大的数丢弃,排序的时间就缩短了。
显示比较两个数组的中位数,小的哪个设为xmin,大的设为xmax,xmin之前的数肯定在中位数之前,xmin数组中大于xmax的数肯定不在中位数之前
再加上xmax以及它之前的数,中位数一定在这些数中(这些数是所有数中最小的那些且数量超过两个数列数目之和的一半。)最后在排序找出中位数。
最后发现这两个点还是没过(原谅我忽视了系统提示的答案错误,还一直以为是超时导致的错误)忍不住看了题解,发现是数据类型出错了。改好数据类型之后就ac了,我最初提交的代码改了数据类型也过了(裂开)

解题思路

直接合并两个数组,再来个快排找中位数就🆗了

代码

#include<stdio.h>
#include<algorithm>
using namespace std;
long long int x[30000007],y[30000007],z[50000007],a;
int main()
{
	int m,n,cnt=0,mid1,mid2;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%lld",&x[i]);
	}
	scanf("%d",&m);
	for(int i=0;i<m;i++){
		scanf("%lld",&y[i]);
	}
	mid1=(m-1)/2;
	mid2=(n-1)/2;
	if(x[mid2]<=y[mid1]){
		for(int i=0;i<n&&(x[i]<=y[mid1]||i<=mid2);i++){
			z[cnt++]=x[i];
		}
		for(int i=0;i<=mid1;i++){
			z[cnt++]=y[i];
		}
	}else{
		for(int i=0;i<=mid2;i++){
			z[cnt++]=x[i];
		}
		for(int i=0;i<m&&(y[i]<=x[mid2]||i<=mid1);i++){
			z[cnt++]=y[i];
		}
	}
	sort(z,z+cnt);
//	for(int i=0;i<cnt;i++){
//		printf("%ld ",z[i]);
//	}
	printf("%lld\n",z[(m+n-1)/2]);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sen-Median趋势分析方法是一种用于描述和分析时间序列数据的统计工具。它通过将数据按照位置进行排序,确定数据的中间位置,将中间位置的数据作为时间序列的趋势模型。 Sen-Median趋势分析方法主要分为以下几个步骤:首先,将时间序列数据按照时间顺序进行排序。然后,计算出各个时间点数据的斜率值,即通过计算两个数据值的差值来衡量数据的变化趋势。接下来,找到数据斜率值的中位数,作为代表数据整体趋势的中间趋势。最后,根据中间趋势值来绘制趋势线,以展示数据的整体趋势。 Sen-Median趋势分析方法具有以下几个特点:首先,它能够减轻极端值对趋势分析结果的影响,使得趋势模型更加平滑和稳定。其次,这种方法不依赖于分布假设,可以适用于不同类型的数据。第三,该方法计算简单,不需要对数据进行复杂的数学计算,比较易于理解和使用。 Sen-Median趋势分析方法在实际应用中具有广泛的应用。例如,在金融领域,可以使用该方法来分析股票价格的趋势,帮助投资者做出决策。在气象学中,可以利用该方法来研究气温变化的趋势,以预测天气情况。此外,在经济学、环境科学等领域,Sen-Median趋势分析方法也有着广泛的应用。 总之,Sen-Median趋势分析方法是一种用于揭示时间序列数据趋势的统计分析工具,它的特点是稳定、简单易懂,广泛应用于各个领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值