我正在尝试对双端队列进行子类化,但无法弄清楚如何设置 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) 在我的项目中,我使用带有对象双端队列的 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 适用于我制作的每个汽车对象的第二个数字。
deque::shrink_to_fit因为我有严格的内存要求,所以我试图在从deque开头删除一个范围后使用.但是,它没有用,我只是看到libstdc ++实现了shrink_to_fit使用交换技巧和副本.这实际上意味着,而不是更好的内存使用,我得到2倍的使用一段时间,并因此而得到OOM-ed.
我认为这限制了可用性,shrink_to_fit我想知道标准中是否有/可以保证?我在草稿副本(N3035)中查了一下,只看到"这是一个非约束性请求......".我知道为什么它是非绑定的,也是为什么它不能完成vector,但从我对deque实现的了解,它应该可以提供一些内存保证(并且看看libc ++,它似乎做到了更聪明的方式).是否有保证,因为它们与具体实施有关?
我正在使用Queue<T> q1并且我知道将q1.offer();在队列末尾添加一个元素。但是现在,我想要做的是在队列前面添加一个元素,这是队列无法实现的。我能想到的可能方法是
现在,作为一个非程序员的人,我不确定如何编写这些方法;哪个更经济,更容易做。
我在 1) 中遇到的问题是将现有 Queue 转换为 Deque,反之亦然;并在 2) 如何使用Collections.reverseOrder();来反转现有的队列。
我试图理解,为什么我们需要Offer和OfferLast方法Deque,因为这两种方法都在Deque. 它的意义何在?
我一直在寻找迭代双端队列的最佳方法,同时使用 popleft 使用第一个元素并减少每次迭代的队列。我基本上想弹出双端队列中的第一个,使用此值运行一些代码,然后执行相同的过程,直到双端队列中没有更多值为止。
我在网上找到的最好的方法是使用 try 和 catch 块来捕获 IndexError:
try:
while mydeque:
value = mydeque.popleft()
except IndexError:
# handle empty mydeque
Run Code Online (Sandbox Code Playgroud)
当然,抛出异常并不是做到这一点的最佳方式。我也会捕获 while 循环中发生的任何 IndexError ,这并不理想。使用 for 循环不起作用,因为我会在迭代期间修改双端队列。
做到这一点的最佳方法是什么?
我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)
无论LinkedList和ArrayDeque实现Deque接口。我很困惑为什么它适用于ArrayDeque但不适用于LinkedList?
我有以下工作代码(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*>?
我正在用 javascript 学习数据结构
我现在的重点是如何实现双端队列?
编辑:从下面的评论中,我得到了关于如何实现
deque based array. 有没有指导如何deque based object使用 class来实现?
我明白了一些我需要的要点:
但我对以下几点感到困惑:
我需要多少个指针?至少我从队列中知道我需要两个(头尾)指针但不确定我是否需要更多的双端队列
在这种情况下,javascript 中哪种数据类型方便作为基础?我在 youtube 上看到一些导师在谈论循环数组,例如我在 JS 中不知道的。
编辑2:
我正在关注一本名为:学习 javascript 数据结构和算法第 3 版的书
在本书的第5章中,作者开始基于对象和一些变量来实现Deque
但我不明白他是怎么做到的,因为代码是加密的,但我仍然可以访问他的文件并测试他的方法github 存储库
我可以说@trincot 回答非常接近书籍作者的方法
但是当我比较结果时,我得到了这个 [1 = author - 2 = @trincot] :

根据第6章中关于链表的书籍索引,所以我没想到他的解决方案会基于他之前没有提到的东西
如果我错过任何一点,我将不胜感激告诉我......谢谢
这是我在 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) deque ×10
c++ ×4
java ×3
python ×2
queue ×2
algorithm ×1
c++11 ×1
collections ×1
elements ×1
java-6 ×1
javascript ×1
loops ×1
object ×1
performance ×1
reverse ×1
stddeque ×1
subclass ×1
visual-c++ ×1