gpt4 book ai didi

c++ - 双端队列实现

转载 作者:行者123 更新时间:2023-11-30 02:56:23 24 4
gpt4 key购买 nike

我对我在 Internet 上找到的代码有疑问,该代码使用双端队列来查找元素的最大值 --

 #include <iostream>
#include <deque>

using namespace std;


void test(int arr[], int n)
{
std::deque<int> Qi(n);
int i;
for (i = 0; i < n; ++i)
{
while ( (!Qi.empty()) && arr[i] >= arr[Qi.back()])
Qi.pop_back(); // Remove from rear

Qi.push_back(i);
}
cout << arr[Qi.front()];
}

// Driver program to test above functions
int main()
{
int arr[] = {12, 1, 78, 90, 57, 89, 56};
int n = sizeof(arr)/sizeof(arr[0]);
test(arr, n);
return 0;
}

我的问题是当我没有做任何 Qi.push_front() 时 Qi.front() 如何给出正确的索引?

但是下面的代码给了我一个 0

  void test(int arr[], int n)
{
std::deque<int> Qi(n);
int i;
for (i = 0; i < n; ++i)
{
Qi.push_back(i);
}
cout << arr[Qi.front()];
}

对不起,如果我听起来很愚蠢.. deques 的新手......

谢谢

最佳答案

std::deque<int> Qi(n);n 创建双端队列元素,全为零。 push_back操作在后面添加更多元素,所以之后双端队列有 2 * n元素。 Qi.front()Qi[0] 相同.

所有这些都有据可查,例如here .

关于c++ - 双端队列实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15536901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com