标签: deque

子类化双端队列时如何设置 maxlen

我正在尝试对双端队列进行子类化,但无法弄清楚如何设置 maxlen。

有没有__maxlen__

编辑:-以下是“坏”蟒蛇吗?

from collections import deque

class MinMax(deque):
    def __init__(self):
        deque.__init__(self, maxlen=2)

mm = MinMax()
Run Code Online (Sandbox Code Playgroud)

python subclass deque

2
推荐指数
1
解决办法
1180
查看次数

如何从双端队列中删除随机元素

在我的项目中,我使用带有对象双端队列的 stl 库。程序应该删除某些满足条件的对象变量,但是每次元素满足要删除的要求时,程序都必须中止。这是我程序的简化版本

int main(){
    deque<Cars> card;
    deque<Cars> iterator::iter
    int count=0;
    Cars car(14,15);
    card.push_front(car);
    Cars car(12,45);
    card.push_front(car);
    Cars car(15,60);
    card.push_front(car);
    Cars car(20,45)
    card.push_front(car);
    for(iter=card.begin();iter!=card.end();iter++){
        if(iter->getnum2()==60){
            card.erase(card.begin()+count);

        }
        count=count+1;

    }
    return 0;

} 
Run Code Online (Sandbox Code Playgroud)

请注意, 我必须在这个例子中使用一个双端队列,在这个例子中,我让 iter get 的 getnum2 适用于我制作的每个汽车对象的第二个数字。

c++ object elements deque visual-c++

2
推荐指数
1
解决办法
4175
查看次数

deque :: shrink_to_fit内存保证

deque::shrink_to_fit因为我有严格的内存要求,所以我试图在从deque开头删除一个范围后使用.但是,它没有用,我只是看到libstdc ++实现了shrink_to_fit使用交换技巧和副本.这实际上意味着,而不是更好的内存使用,我得到2倍的使用一段时间,并因此而得到OOM-ed.

我认为这限制了可用性,shrink_to_fit我想知道标准中是否有/可以保证?我在草稿副本(N3035)中查了一下,只看到"这是一个非约束性请求......".我知道为什么它是非绑定的,也是为什么它不能完成vector,但从我对deque实现的了解,它应该可以提供一些内存保证(并且看看libc ++,它似乎做到了更聪明的方式).是否有保证,因为它们与具体实施有关?

c++ deque c++11

2
推荐指数
1
解决办法
371
查看次数

如何在java中的Queue前面添加一个元素?

我正在使用Queue<T> q1并且我知道将q1.offer();在队列末尾添加一个元素。但是现在,我想要做的是在队列前面添加一个元素,这是队列无法实现的。我能想到的可能方法是

  • 使用双端队列,我可以在前面和最后添加元素。
  • 反转 q1,在队列末尾添加元素并再次反转。

现在,作为一个非程序员的人,我不确定如何编写这些方法;哪个更经济,更容易做。

我在 1) 中遇到的问题是将现有 Queue 转换为 Deque,反之亦然;并在 2) 如何使用Collections.reverseOrder();来反转现有的队列。

java queue reverse deque

2
推荐指数
1
解决办法
2万
查看次数

为什么我们在 Deque 中有 offer(E e) 和 offerLast(E e) 方法,即使它们解决了相同的目的

我试图理解,为什么我们需要OfferOfferLast方法Deque,因为这两种方法都在Deque. 它的意义何在?

java collections deque java-6

2
推荐指数
1
解决办法
1247
查看次数

Python - 使用 popleft() 遍历双端队列

我一直在寻找迭代双端队列的最佳方法,同时使用 popleft 使用第一个元素并减少每次迭代的队列。我基本上想弹出双端队列中的第一个,使用此值运行一些代码,然后执行相同的过程,直到双端队列中没有更多值为止。

我在网上找到的最好的方法是使用 try 和 catch 块来捕获 IndexError:

try: 
    while mydeque: 
        value = mydeque.popleft()
except IndexError: 
# handle empty mydeque
Run Code Online (Sandbox Code Playgroud)

当然,抛出异常并不是做到这一点的最佳方式。我也会捕获 while 循环中发生的任何 IndexError ,这并不理想。使用 for 循环不起作用,因为我会在迭代期间修改双端队列。

做到这一点的最佳方法是什么?

python loops deque

2
推荐指数
1
解决办法
2215
查看次数

LinkedList 的“类型不兼容:无法推断类型变量”

incompatible type: cannot infer type-variable(s) E (actual and formal argument lists differ in length)从以下代码的第二个语句中得到错误,

Deque<TreeNode>[] stacks = new Deque[2];
Arrays.set(stacks, LinkedList::new);
Run Code Online (Sandbox Code Playgroud)

但是,用 ArrayDeque 替换 LinkedList 修复了错误,

Arrays.set(stacks, ArrayDeque::new);
Run Code Online (Sandbox Code Playgroud)

无论LinkedListArrayDeque实现Deque接口。我很困惑为什么它适用于ArrayDeque但不适用于LinkedList

java deque

2
推荐指数
1
解决办法
636
查看次数

为什么 deque 比 queue 快?

我有以下工作代码(g++ 8.2,C++17 标准。)

    queue<TreeNode*> q{};

    q.push(root);
    q.push(nullptr);
    int sum = root -> val;
    while (!q.empty()) {
        TreeNode *n = q.front();
        q.pop();

        if (n != nullptr) {
            sum += n->val;
            if (n-> left != nullptr) q.push(n->left);
            if (n-> right != nullptr) q.push(n->right);   
        } else {
            if (q.empty()) break;
            q.push(nullptr);
            sum = 0;
        }

    }
    return sum;
Run Code Online (Sandbox Code Playgroud)

然后我queue<TreeNode*>deque<TreeNode*>. 事实证明,速度至少提高了 20%。为什么deque<TreeNode*>比 快这么多queue<TreeNode*>

c++ queue deque data-structures

2
推荐指数
1
解决办法
650
查看次数

如何在javascript中实现deque数据结构?

我正在用 javascript 学习数据结构

我现在的重点是如何实现双端队列?

编辑:从下面的评论中,我得到了关于如何实现deque based array. 有没有指导如何deque based object使用 class来实现?

在此处输入图片说明

我明白了一些我需要的要点:

  • 添加前()
  • 移除前线()
  • 窥视前()

  • 添加返回()
  • 删除返回()
  • 偷看()

但我对以下几点感到困惑:

  • 我需要多少个指针?至少我从队列中知道我需要两个(头尾)指针但不确定我是否需要更多的双端队列

  • 在这种情况下,javascript 中哪种数据类型方便作为基础?我在 youtube 上看到一些导师在谈论循环数组,例如我在 JS 中不知道的。

编辑2:

我正在关注一本名为:学习 javascript 数据结构和算法第 3 版的书

在本书的第5章中,作者开始基于对象和一些变量来实现Deque

但我不明白他是怎么做到的,因为代码是加密的,但我仍然可以访问他的文件并测试他的方法github 存储库

我可以说@trincot 回答非常接近书籍作者的方法

但是当我比较结果时,我得到了这个 [1 = author - 2 = @trincot] : 在此处输入图片说明

根据第6章中关于链表的书籍索引,所以我没想到他的解决方案会基于他之前没有提到的东西

如果我错过任何一点,我将不胜感激告诉我......谢谢

javascript deque data-structures

2
推荐指数
2
解决办法
4324
查看次数

为什么这个 C++ 双端队列代码在我解调时“效率较低”?

这是我在 HackerRank 上研究这个问题的解决方案时遇到的一个问题。它基本上归结为以下内容:给定一个数组 A 和一个整数 K,问题要求您找到大小为 K 的 A 的每个连续子数组的最大值。还有一些额外的东西(对于每个测试用例,这个问题都会发生 T次,并且必须从输入中读取才能获得 A),但这就是它的要点。

该站点会检查您的答案是否足够有效,即使您的代码最终产生了正确的输出,也可能会因超时而导致提交失败。现在,当您第一次进入代码区域时,有一些预定义的代码供您使用:

#include <iostream>
#include <deque> 
using namespace std;

void printKMax(int arr[], int n, int k){
    //Write your code here.
}

int main(){

    int t;
    cin >> t;
    while(t>0) {
        int n,k;
        cin >> n >> k;
        int i;
        int arr[n];
        for(i=0;i<n;i++)
            cin >> arr[i];
        printKMax(arr, n, k);
        t--;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,该站点已经为您的利益处理输入,并为您指明模块化方法。你所要做的就是解决连续子数组问题;我使用以下函数完成了它,该函数通过了所有测试用例:

void printKMax(int arr[], int n, int k){
    // Queue will store …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm performance deque stddeque

2
推荐指数
1
解决办法
211
查看次数