寻找时间黑客编程初赛 ---- 简单中位数
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;
}
在给定一个参数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;
}
相关文章推荐
- 获取C#代码执行的时间(精确到毫秒)
- spring异常
- java中的内部类
- C#中timer类 在C#里关于定时器类就有3个
- 使用Spring MVC统一异常处理实战
- 快速排序
- c语言变量与常量
- Struts2中校验配置问题
- 插入排序InserSort
- 【编程习惯】对运行时异常(RuntimeError)代码的定位。针对C,C++以及大多数无虚拟机编程语言。
- Python数据库ORM SQLAlchemy 0.7学习笔记(7) 关系
- 易语言调用GetPrivateProfileStringA
- java判断string变量是否是数字的六种方法小结
- C++ 嵌入Python学习(一)
- Eclipse Helios 配置 Android SDK 2.3 和 ADT 0.9.9
- VC++通过ODBC将数据导出到excel
- JavaScrip——练习(求整数和、求整数积)
- C++笔记——继承中的构造和析构调用规则
- Matlab模板匹配实现图像运动估计(频域实现)
- 如何在 C#中添加 dll 文件