![](https://img-blog.csdnimg.cn/20201216094205889.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法数据结构
各个大厂算法面试专栏,帮助大家一起提升算法数据结构能力,全部是关于算法数据结构的干货
nihui123
现在在修炼中
展开
-
大厂面试算法系列-动态规划求解最长公共子串问题
问题描述例如“123ABVCSSS”,“AJKFJJ123SER”最长公共子串 123。动态规划 这里求解的是最长公共子串,而不是最长公共子序列,子序列可以是不连续的,但是子串必须是连续的。 使用动态规划求解问题首先需要定义一个的二维数组,表示str1中的第i个字符和str2中的第j个字符所构成的最大子串对应的位置。如果,要满足最大子串的要求,那么首先需要知道str1[i]和str2[j]所对应的字符是否相等。如果不相等显然他们就不满足最大子串的要求。 如下图所示,如果相等则满足下图中的等式,也就是说原创 2022-06-06 10:48:05 · 218 阅读 · 0 评论 -
大厂面试算法系列-如何从无序链表中移除重复项(二)-递归法
导语 这种方法主要的思路是对节点cur来说首先递归的删除以cur.next为首的子链表中的重复节点。这个就是递归的主要思想。 对于节点cur,首先递归地删除以cur.next为首的子链表中重复的结点,接着从以cur.next为首的子链表中找出与cur有着相同数据域的节点并删除,代码实现如下。private static LNode removeDupRecursion(LNode head){ // 如果没有后续节点了那么就退出递归 if(head.next==null){ retur.原创 2021-04-22 23:03:46 · 2878 阅读 · 0 评论 -
大厂面试算法系列-如何从无序链表中移除重复项(一)-顺序删除
导语 题目描述:给定一个没有经过排序的链表,去掉其中的重复项,并且保留原顺序,例如链表1->2->1->5->5-7,去掉其中的重复项之后会变成 1->2->5->7 上面提到的一个概念就是链表去掉重复之后链表保证原来的顺序,也就是链表要保证稳定性。在一些算法进行操作之后链表的前后顺序就会发生变化,我们称这种现象为不稳定。那么如何实现一个链表去重呢!顺序删除 首先要知道这个链表是无序的,其次要想取消链表,就必须先找到链表中相同的元素,那么最简单的方.原创 2021-01-03 20:39:53 · 1512 阅读 · 0 评论 -
大厂面试算法系列-如何实现链表的逆序(二)-递归法
导语 接着上次的内容,上次博客中展示了原地进行单链表的逆序操作,当然除了原地逆序还可以通过递归的方式进行调用操作。下面就来看看通过递归的方式如何进行单链表的逆序操作。递归法逆序链表 假定原来的链表为1->2->3->5->4->7,递归的思路,首先就是将除了第一个节点以外的节点先进行逆序,然后将第一个节点添加到逆序的子链表后面。同理要逆序第二个节点,就需要将除了第一个节点以外的链表先进行逆序。通过这种方式就可以实现链表的完全逆序了。第一次递归第二次递归 .原创 2020-12-26 16:53:44 · 2078 阅读 · 2 评论 -
大厂面试算法系列-如何实现链表的逆序(一)-原地逆序
题目描述 给定一个带有头节点的单向列表,将这个链表进行逆序。例如head->1->3->4->2,逆序之后变成head->2->4->3->1题目分析 由于单链表的数据结构与数组的数据结构不同,对于链表来说每个节点都存在一个数据域和指针域,其中指针域存储的是下一个对象的地址。所以对于一个链表来说,要访问其中的任意节点,只能从头开始遍历,所以对于单链表来说查找的时间复杂度是O(n)。对于一个链表的操作,需要特别注意的就是对于指针的记录。不然就会丢失.原创 2020-12-25 22:39:10 · 1363 阅读 · 0 评论