您的位置:首页 > 编程语言

寻找时间黑客编程初赛 ---- 简单中位数

2015-12-26 22:50 246 查看
题意:给定一个序列,再给l、r两个参数,作用就是划定区间,比如说序列为1,2,3,4,5. l = 1  r = 3,区间就是2,3,4.

在给定一个参数k代表子区间长度,比如说k=2,则子区间为2,3  3,4  2,4分别算出其中位数,求出最大的中位数。

思路:建立一个vector,将指定区间的元素push_back进去,排下序,之后取最大的k个数取其中位数,进入result的vector。

代码

#include "iostream"
#include "stdio.h"
#include "vector"
#include "string"
#include "algorithm"
using namespace std;

class Median {
public:
vector<int> getMaxMedian(vector<int> A, int n, int Q, vector<int> l, vector<int> r, vector<int> k) {
// write code here
int i,j,q;
int temp;
vector<int> result;
if(n<1||Q<1)
return result;

for(i=0;i<Q;i++)
{
vector<int> num;
for(j=l[i];j<=r[i];j++)
{
num.push_back(A[j]);
}

sort(num.begin(),num.end());

int len = r[i] - l[i] + 1;
int maxlen = len - k[i] + 1;
temp = (k[i]+1)/2 - 1;
long max = num[temp];
for(j=0;j<maxlen;j++)
{
if(num[j+temp]>max)
max = num[j+temp];
}

result.push_back(max);
}
return result;
}
};

int main()
{
Median test;
vector<int> result;
int i,j;
vector<int> xulie;
int n = 5;
int Q = 3;
vector<int> l;
vector<int> r;
vector<int> k;

for(i = 1;i<=5;i++)
{
xulie.push_back(i);
}
for(i=0;i<3;i++)
{
l.push_back(i);
r.push_back(i+1);
}
k.push_back(1);
k.push_back(2);
k.push_back(2);

result = test.getMaxMedian(xulie,n,Q,l,r,k);
for(i=0;i<3;i++)
{
cout<<result[i]<<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: