c++ 语言 使用deque实现最大窗口
2017-08-09 12:08
232 查看
#include <iostream>
#include <deque>
auto getMaxWindow(int arr[], int w, int length,int array[]) -> int (*)[6]
{
std::deque<int> qmax;
int index = 0;
for (int i = 0; i < length; ++i)
{
while (!qmax.empty() && arr[qmax.back()] < arr[i])
{
qmax.pop_back();
}
qmax.push_back(i);
if (qmax.front() == i - w)
{
qmax.pop_front();
}
if (i >= w - 1)
{
array[index++] = arr[qmax.front()];
}
}
return (int (*)[6])array;
}
int main()
{
int arr[8] = { 4, 3, 5, 4, 3, 3, 6, 7 };
int w = 3;
int array[6];
int length = sizeof(arr) / sizeof(arr[0]);
int(*p)[6] = &array;
p = getMaxWindow(arr, w, length, array);
for (size_t i = 0; i < 6; ++i)
{
std::cout << array[i] << std::endl;
}
system("pause");
return 0;
}
#include <deque>
auto getMaxWindow(int arr[], int w, int length,int array[]) -> int (*)[6]
{
std::deque<int> qmax;
int index = 0;
for (int i = 0; i < length; ++i)
{
while (!qmax.empty() && arr[qmax.back()] < arr[i])
{
qmax.pop_back();
}
qmax.push_back(i);
if (qmax.front() == i - w)
{
qmax.pop_front();
}
if (i >= w - 1)
{
array[index++] = arr[qmax.front()];
}
}
return (int (*)[6])array;
}
int main()
{
int arr[8] = { 4, 3, 5, 4, 3, 3, 6, 7 };
int w = 3;
int array[6];
int length = sizeof(arr) / sizeof(arr[0]);
int(*p)[6] = &array;
p = getMaxWindow(arr, w, length, array);
for (size_t i = 0; i < 6; ++i)
{
std::cout << array[i] << std::endl;
}
system("pause");
return 0;
}
相关文章推荐
- C++使用两个栈实现一个可以获取栈中最大值和最小值的栈
- 使用SWIG实现C/C++与其他语言间的互相调用 zz
- C++ 实现多语言程序开发研究与Xtreme ToolkitPro的使用(一)
- 使用SWIG实现C/C++与其他语言间的互相调用 zz
- 左神的书——《程序员代码面试指南》之生成窗口最大值数组问题c++实现
- 使用SWIG实现C/C++与其他语言间的互相调用
- C++ 实现多语言程序开发研究与Xtreme ToolkitPro的使用(二)
- C++ 实现多语言程序开发研究与Xtreme ToolkitPro的使用(三)
- 使用C++模板技术实现类的动态注册和获取
- SIP协议解析与实现(c和c++使用osip) 2
- 编程使用资源文件实现多语言页面(In Action)
- 使用数据绑定实现多窗口间的数据同步
- 使用c++实现事件注册
- 使用CSS+JavaScript实现可拖动的窗口的源代码(推荐)
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- 使用VC6.0实现窗口的任意分割
- 使用反映实现前端WEB窗口控件与后台数据库类对象的动态绑定
- 使用VB6.0在Windows Vista下实现全磨砂玻璃窗口
- 使用VC6.0实现窗口的任意分割
- [语音合成技术第四讲]使用C++实现语音识别