我有一组值和索引的链接列表。现在,我只想保留数组中与LL中的索引相对应的值。有没有一个标准的算法来做到这一点。如果可能,请举例说明
所以,假设我有一个数组1,2,5,6,7,9 我有一个链表2-> 3
所以,我想将值保留在索引2和3处。即保持5和6。 因此我的函数应该返回5和6
答案 0 :(得分:1)
通常,链表本质上是连续的。使用并行机器不会加快遍历列表的速度,因此问题的步数不能低于O(n),其中n是列表的大小。
但是,如果你有一些额外的方式来访问列表,你可以用它做一些事情。 例如,列表的所有元素都可以存储在固定大小的数组中(尽管不是连续的方式)。可以使用以下结构在数组中表示List成员。
struct ListNode {
bool isValid;
T data;
int next;
}
值isValid
设置数组中的给定单元格是否被有效的列表成员占用,或者它只是一个空单元格。
现在,并行算法会立即读取所有单元格,检查它是否代表有效数据,如果是,则用它做一些事情。
第二部分:每个线程具有输入数组idx
的有效索引A
,必须标记A[idx]
不被删除。一旦我们知道应该删除A
的哪些元素,哪些元素不被删除 - 可以应用并行压缩算法。