C++ 滑动最大窗蛮力法
给定一个大整数数组和一个大小为“w”的窗口,当窗口在整个数组中滑动时,在窗口中查找当前最大值 我做了两个for循环,第一个循环工作正常,但是内部循环不能根据不同的窗口大小正确移动 我试着把它画在纸上,但是我仍然不能得到一个内环的公式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+
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;i cout你的内环是正确的。是你的外环关闭了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;i std::无法定义“无法根据不同的窗口大小正确移动”。内部循环应该移动窗口步数。当前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。