【问题标题】:Longest increasing subsequence in a linked list of integers整数链表中的最长递增子序列
【发布时间】:2021-07-12 08:42:22
【问题描述】:

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

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

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

当列表达到最大长度时,如何存储节点和计数然后返回? 提前谢谢:)

【问题讨论】:

  • 请添加更多代码,不要让我们猜测您到底尝试了什么。顺便说一句:也许the tour 可以帮助您了解如何最好地与 Stack Overflow 社区互动。
  • 您也可以搜索 SO。例如,start with java subsequence
  • 我只是想告诉你edit函数。您的帖子仍有改进的潜力,这可能会增加获得您所面临的具体问题的实际答案的机会。

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


【解决方案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;

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

对于下一个任务,请尝试以您自己的方式找到解决方案。实现您所需要的:当前子列表和到那时为止的最大子列表。 是一种难以解开的谜题,自己完全解决会带来更多的乐趣。

【讨论】:

  • 到目前为止很好,我唯一(有点)想念的是第二个 if 块中的另外三个点。
  • @Wolf 谢谢,OP应该使用技能。
猜你喜欢
  • 2013-07-03
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
相关资源
最近更新 更多