整数链表中最长递增子序列

时间:2021-07-12 08:42:22

标签: java linked-list singly-linked-list

给定一个整数的单向链表,我需要将最长的递增子序列作为新的链表返回。 例如,给定的列表是:1->5->4->3->6->8->12->10 新的应该是:3->6->8->12。

我试图遍历列表并比较每个节点

if (n.data < n.next.data)
  newList.add(n);

当列表处于最大长度时如何存储节点的和计数然后返回它? 提前谢谢:)

1 个答案:

答案 0 :(得分:1)

您应该尝试更多,以了解如何解决问题。 这可以通过纸上/思想设计您将如何解决问题来完成。

  • 您需要维护一个最大子列表 maxSublist,并且
  • 当前子列表 currentSublist

当您可能添加当前节点时,您应该将其与前一个节点(currentSubList 的最后一个元素)进行比较。由于获取单个链表的最后一个元素的开销很大,因此处理后我记得该节点为 priorNode

在伪代码中:

List<Integer> maxSublist = new SingleLinkedList<>(); // Empty list.

List<Integer> currentSublist = new SingleLinkedList<>();
Node priorNode = null;
for (Node node = list.head(); node != null; node = node.next) {
     if (priorNode == null || node.data > priorNode.data) {
         currentSublist.add(node);
     } else {
         ...
     }
     if (currentSublist.size() > maxSublist.size()) {
         maxSublist = currentSublist;
     }
     priorNode = node;
}
return maxSublist;

顺便说一下,以上并不是唯一的解决方案。您可能需要在填写 ... 后更改代码。

对于下一个任务,请尝试以这种方式自己找到解决方案。意识到你需要什么:当前的子列表和到那时的最大子列表。 这是一种难题,当完全自己解决时,会带来更多乐趣。

相关问题