首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >整数链表中的最长递增子序列

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

Stack Overflow用户
提问于 2021-07-12 16:42:23
回答 1查看 91关注 0票数 0

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

我已经尝试遍历列表,并通过

代码语言:javascript
复制
if (n.data < n.next.data)
  newList.add(n);

当列表达到最大长度时,我如何存储节点和计数,然后返回它?感谢前面的内容:)

EN

回答 1

Stack Overflow用户

发布于 2021-07-12 17:27:50

你应该尝试更多,以获得如何处理问题的想法。这可以通过在纸上/在思考中设计你将如何解决问题来完成。

  • 你需要维护一个最大的子列表currentSublist.

,并且

  • 一个当前的子列表and

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

在伪代码中:

代码语言:javascript
复制
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;

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

对于下一项任务,试着用这种方式自己找到解决方案。意识到你需要什么:当前的子列表和之前的最大子列表。这是一种困难的难题,当totaLLy自己解决它时,它会带来更多的乐趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68344360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档