C++ 滑动最大窗蛮力法

C++ 滑动最大窗蛮力法,c++,algorithm,C++,Algorithm,给定一个大整数数组和一个大小为“w”的窗口,当窗口在整个数组中滑动时,在窗口中查找当前最大值 我做了两个for循环,第一个循环工作正常,但是内部循环不能根据不同的窗口大小正确移动 我试着把它画在纸上,但是我仍然不能得到一个内环的公式 int main() { vector<int> arr = { -4, 2, -5, 3, 6 }; int window = 3; for (int i = 0; i < arr.size() - window; i+

给定一个大整数数组和一个大小为“w”的窗口,当窗口在整个数组中滑动时,在窗口中查找当前最大值

我做了两个for循环,第一个循环工作正常,但是内部循环不能根据不同的窗口大小正确移动

我试着把它画在纸上,但是我仍然不能得到一个内环的公式

int main() {

    vector<int> arr = { -4, 2, -5, 3, 6 };
    int window = 3;
    for (int i = 0; i < arr.size() - window; i++)
    {
        int max = arr[i];
        for (int j = i + 1; j < i + window; j++)
        {
            cout << " i = "<<i << "j = " << j << endl;

            if (max < arr[j])
                max = arr[j];
        }

        cout << max << " " << endl;

    }
intmain(){
向量arr={-4,2,-5,3,6};
int窗口=3;
对于(int i=0;icout你的内环是正确的。是你的外环关闭了1,应该是:

for (int i = 0; i <= arr.size() - window; i++)
for(inti=0;i试试这个:

#include <algorithm>

int main() {

  std::vector<int> arr = { -4, 2, -5, 3, 6 };
  int window = 3;
  for (std::size_t i = 0; i < arr.size() - window + 1; i++)
  // one of your bugs is here --------------------^           
  {
      int max = 0;
      // this way, it's easier to see how the window slides
      for (std::size_t j = 0; j < window; j++)
      {
          std:: cout << " i = "<<i << "j = " << j+i << std::endl;

          max=std::max(arr[i+j],max);
          // --------------^
          // i becomes the window's offset
          // j is the offset inside the window
          // using std::max eliminates a i+j twice with an if
          //  ... (and will be inlined anyway)
      }

      std::cout << max << " " << std::endl;

  }
  return 0;
}
#包括
int main(){
向量arr={-4,2,5,3,6};
int窗口=3;
对于(std::size\u t i=0;istd::无法定义“无法根据不同的窗口大小正确移动”。内部循环应该移动窗口步数。当前j等于i+1,这是错误的,它从i+1开始。例如,在上面的代码数组中,对于3的窗口,j应该从2,3,4开始。但是对于2的窗口,它应该是1,2,3,4。这毫无意义。根据que中的描述,显示的代码看起来绝对正确SthValsavikk考虑一个3的窗口,上面的数组在代码中是一样的。输出max应该是2,3,6,而上面的代码,只输出2,3,不计算或计数6。