使用 heappop() 的代码可以正常工作,但是当使用数组表示时它不起作用
code using heappop() is working but when using array representation its not working
这是一个我一直在研究的 leetcode 问题 https://leetcode.com/problems/last-stone-weight/ ,代码似乎接受使用以下代码片段
a= heapq.heappop(stones1);
b= heapq.heappop(stones1);
heapq.heappush(stones1,a-b);
但是当它被使用时它似乎不起作用,
a=stones1[0];
b=stones1[1];
heapq.heappop(stones1);
heapq.heappop(stones1);
heapq.heappush(stones1,a-b);
这两个代码代表的不是同一个东西吗?
有了工作代码...
a= heapq.heappop(stones1);
b= heapq.heappop(stones1);
...a
和 b
代表堆中的最小值和 one-but-least 值(就像在开始提取之前一样)。
没错,最小值总是位于堆中的索引 0 处,所以这是正确的:
a=stones1[0];
heapq.heappop(stones1);
但是,并非 值总是位于堆中的索引 1 处 one-but-least。它可能位于索引 2。所以这并不总是正确的:
a=stones1[0];
b=stones1[1];
heapq.heappop(stones1);
heapq.heappop(stones1);
这是一个堆的可视化示例:
1
/ \
3 2
在列表表示中,这是 [1, 3, 2]
执行heapq.heappop(stones1)
后,这个列表变成[2, 3]。所以现在 b
中你想要的值已经从索引 2 移动到索引 0。它会在再次执行 heapq.heappop(stones1)
时弹出。
这是一个我一直在研究的 leetcode 问题 https://leetcode.com/problems/last-stone-weight/ ,代码似乎接受使用以下代码片段
a= heapq.heappop(stones1);
b= heapq.heappop(stones1);
heapq.heappush(stones1,a-b);
但是当它被使用时它似乎不起作用,
a=stones1[0];
b=stones1[1];
heapq.heappop(stones1);
heapq.heappop(stones1);
heapq.heappush(stones1,a-b);
这两个代码代表的不是同一个东西吗?
有了工作代码...
a= heapq.heappop(stones1);
b= heapq.heappop(stones1);
...a
和 b
代表堆中的最小值和 one-but-least 值(就像在开始提取之前一样)。
没错,最小值总是位于堆中的索引 0 处,所以这是正确的:
a=stones1[0];
heapq.heappop(stones1);
但是,并非 值总是位于堆中的索引 1 处 one-but-least。它可能位于索引 2。所以这并不总是正确的:
a=stones1[0];
b=stones1[1];
heapq.heappop(stones1);
heapq.heappop(stones1);
这是一个堆的可视化示例:
1
/ \
3 2
在列表表示中,这是 [1, 3, 2]
执行heapq.heappop(stones1)
后,这个列表变成[2, 3]。所以现在 b
中你想要的值已经从索引 2 移动到索引 0。它会在再次执行 heapq.heappop(stones1)
时弹出。