每个尺寸的最大过滤器的实现

时间:2021-03-26 08:47:25

标签: c++ arrays

我需要你的帮助,因为现在我不知道如何继续。

我有一个任务,我需要用 C++ 为给定的数组实现它。

任务是这样的,以这个数组为例:[1,2,3,4]
我需要制作一个大小为 1-4 的最大过滤器,如下所示:

  1. 第一步:对数组执行大小为1的过滤器,我们将得到:[1,2,3,4]
  2. 第二步:对数组执行大小为 2 的过滤器,我们将得到:[1,2,3]
  3. 第三步:对数组执行大小为 3 的过滤器,我们将得到:[1,2]
  4. 第四步:对数组执行大小为 4 的过滤器,我们将得到:[1]

在这一切之后,我需要对我过滤的每个数组执行一个最小值函数,并且我需要返回所有最小值的总和,例如:

第一个过滤数组的最小值是:1
第二个过滤数组的最小值:1
第三个过滤数组的最小值:1
第四个过滤数组的最小值:1
返回 1+1+1+1=4

困难在于,对于从 1 到 1000000 的每个数组大小,我需要在不到 2 秒的时间内执行所有这些程序。

感谢您的帮助。

1 个答案:

答案 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