我需要你的帮助,因为现在我不知道如何继续。
我有一个任务,我需要用 C++ 为给定的数组实现它。
任务是这样的,以这个数组为例:[1,2,3,4]
我需要制作一个大小为 1-4 的最大过滤器,如下所示:
在这一切之后,我需要对我过滤的每个数组执行一个最小值函数,并且我需要返回所有最小值的总和,例如:
第一个过滤数组的最小值是:1
第二个过滤数组的最小值:1
第三个过滤数组的最小值:1
第四个过滤数组的最小值:1
返回 1+1+1+1=4
困难在于,对于从 1 到 1000000 的每个数组大小,我需要在不到 2 秒的时间内执行所有这些程序。
感谢您的帮助。
答案 0 :(得分:0)
此代码有帮助吗?
void print(const std::vector<int>& vec) {
for (const auto& i : vec) {
std::cout << i << ' ';
}
std::cout << '\n';
}
template <typename it>
it minimum(it start, it end)
{
auto min = start;
for (start; start != end; ++start)
{
if (*start < *min)
min = start;
}
return min;
}
std::vector<int> filter(const std::vector<int>& v, int size)
{
std::vector<int> ret;
for(int i=0; i <= v.size() - size; i++)
{
ret.push_back(*minimum(v.begin()+i, v.begin()+(i+size)));
}
return ret;
}
int main()
{
const std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8};
int sum = 0;
for(int filter_size = 1; filter_size <= 4; filter_size++)
{
const std::vector<int> filtered = filter(v, filter_size);
print(filtered);
sum += (*minimum(filtered.begin(), filtered.end()));
}
std::cout << "sum=" << sum << '\n';
return 0;
}
输出为:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
sum=4