我有一个包含最大元素的整数列表,我需要跟踪列表中的最大元素:
[3, 1, 2] (3 is the max)
每一段时间,我都会得到一个新的随机元素,将其添加到列表的末尾,然后在固定时间内删除列表中的第一个元素。因此,在当前时间段结束时,我的列表将像这样转换:
[3, 1, 2] (3 is the max)
-> [3, 1, 2, -5] (don't care about max at this moment)
-> [1, 2, -5] (now 2 is the max)
我可以根据列表中的值保持一个优先级队列,给出O(log(n
我试图找出如何从给定的边列表中打印生成树列表。例如,如果我读到:
0 1
2 1
0 2
1 3
我想打印一个生成树列表:
[1,0,2,3,1,1]
我知道如何使用以下代码创建邻接列表:
n = int(input("Enter number of vertices: "))
adjList = [[] for i in range(n)]
with open("graph.txt") as edges:
for line in edges:
line = line.replace("\n", "").s
在解决以下两个功能/问题时,我需要您的帮助:
1)
我必须替换树中的元素。树的分支可以有任意数量的子分支,如下代码所示。
data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)
mapmtree :: (a -> a) -> Tree a -> Tree a
mapmtree f (Leaf a) = (f a)
mapmtree f (Branch a c) = Branch (map f a) (mapmtree f c)
我必须穿过这些元素并改变它们。我的问题在最后一行。mapmtree函数接受(Tree
给定下面表示树结构的嵌套列表,
(A (B 1 (2 f g)) C (D 3 4) E)
只有当A、C和E都编码为单项列表时,以下函数才会给出列表中的所有顶级元素。
((A) (B 1 (2 f g)) (C) (D 3 4) (E))
(defun top-level-elm (lst)
(loop for x from 0 to (- (length lst) 1)
collect (car (nth x lst))))
(top-level-elm '((A) (B 1 (2 f g)) (C) (D 3 4) (E)))
;; Result: (A B C
我需要在一个类似列表的数据结构中存储大量的元素。额外的要求是,在任何时候确定每个元素的索引都应该很快。不对元素进行排序,并且无法对其进行排序。
如果使用简单的数组,那么每次查询元素的索引时,我们都必须使用线性搜索。这是可行的,但它是一个非常低效的解决方案。以下是伪代码中的数据结构:
class IndexList1 {
Array elements
getIndex(e) {
for (i = 0; i < elements.length; i++) {
if (elements[i] == e) {
return i
}