自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 基于中文AC自动机--实现中文文本中特定参数的抽取

近来需要做一些从中文文本中提取关键字(关键字自定义)的操作,偶然间了解了AC自动机算法,而网上的算法大多是基于英文实现的,所以也只是适用于英文提取关键字,因此最近研究了一下中文AC自动机的实现,记录下自己的思路,以期与大家共勉。关于AC自动机,网上也已经是有了许多非常详细的介绍,比较关键的两步就是trie树和fail指针的构建,在这里也不再赘述,不清楚的可以去https://bestsort.cn/2019/04/28/402/。下面综合代码讲解一下我个人的实现方法,我使用java语言实现。首先呢,

2020-11-13 16:04:57 731

原创 算法学习(七)--二叉树左右相邻结点添加next指针

问题:给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }填充所有节点的next指针,指向最接近它的同一层右边节点。如果没有同一层没有右边的节点,则应该将next指针设置为NULL。初始时,所有的next指针都为NULL注意:你只能使用常量级的额外内存空间 可以假设给出的二叉树是一个完美的

2020-08-20 11:05:52 709

原创 算法学习(六)--股票最大利润

问题:假设你有一个数组,其中第i个元素表示某只股票在第i天的价格。设计一个算法来寻找最大的利润。你可以完成任意数量的交易(例如,多次购买和出售股票的一股)。但是,你不能同时进行多个交易(即,你必须在再次购买之前卖出之前买的股票)。思路:其实这个问题可以等价于在给的数组里面找到所有的升序数组,然后对每个升序数组首尾相减,就是每次能获得的最大利润,再把得到所有的值相加起来,得到的就是最大利润了。我们用整型变量a, b分别来表示每次的买入和卖出的价格,用布尔型变量status来表示现在手上是否有股票,从而保

2020-08-19 20:08:10 551

原创 算法学习(五)--判断一个整数是否是回文数字

题目:在不使用额外的内存空间的条件下判断一个整数是否是回文数字(int型整数)思路:首先负数肯定都不是回文数字,所以我们需要考虑的只有0和正数。由于不能使用额外的内存空间,这里就需要放弃将数字转化为字符串或者使用数组这两种办法。这里我想到的办法是,根据输入的整数,我们将其拆分,分别将首位数字和末尾数字单独拆出来,进行比较是否相等,不相等则直接返回false(非回文);若相等,则去该数字的头尾,对剩下的部分重复这样的头尾比较操作,直到只剩下0位或者1位数。如:1331,我们先得到头部为1,尾部为1,比较相

2020-08-19 19:26:56 1109

原创 算法学习(四)--找到链表中环的入口位置

题目:对于一个给定的链表,返回环的入口节点,如果没有环,返回null思路:我们首先定义两个快慢指针,从链表的头部开始遍历,快指针每次后移两个结点,慢指针每次后移一个结点,这样,如果存在环,则快慢指针一定会相交,我们返回相交的结点的位置。我们用上图来研究一下怎么得到环的入口。其中,head是链表的头结点,result是环的入口处结点,encounter是快慢指针相遇的位置。我们假设从head到result的距离为x,result到encounter的距离为y,那么,慢指针经过的距离就是l1 = x

2020-05-23 13:28:26 269

原创 算法学习(三)--链表按一定规则重新排列

题目:将给定的单链表L:L0→L1→…→Ln-1→Ln,重新排序为:L0→Ln→L1→Ln-1→L2→Ln-2→…要求使用原地算法,并且不改变节点的值。例如:对于给定的单链表{1,2,3,4},将其重新排序为{1,4,2,3}.思路:先找到链表的中间结点,然后对后半部分进行逆序,随后把后半部分与前半部分进行交叉合并。这里解释一下原地算法,原地算法不依赖额外的资源或者依赖少数的额外资源,仅依靠输出来覆盖输入的一种算法操作。也就是说,我们不能开辟新的链表空间,只能将原有链表...

2020-05-22 18:12:23 494

原创 算法学习(二)--二叉树的遍历递归和迭代两种实现

对于程序员而言,用递归来实现二叉树的遍历可以节省大量的代码;但是对于系统而言,递归的效率却显得十分低下,这时我们也可以使用迭代的方法来提高效率。下面我分别研究了二叉树前序遍历、中序遍历以及后续遍历的递归和迭代实现方法。二叉树的数据结构定义:struct TreeNode {//二叉树数据结构 int val;//二叉树结点值 struct TreeNode* left;//左子树 struct TreeNode* right;//右子树 TreeNode(int v

2020-05-20 18:13:18 206

原创 算法学习(一)--在O(n log n)的时间内对链表进行升序排序

题目:在O(n log n)的时间内对链表进行升序排序思路:时间复杂度为O(n log n),我们很自然的想到使用二分法将链表不断分割成等长的两部分,然后对两部分进行升序排列,两两合并递归。这样,我们就需要设计两个函数,第一个函数是可以将链表无限切割为两部分,这个可以通过使用快慢指针来实现;第二个函数则是将链表的两部分按照升序进行合并。实现过程:首先定义链表的数据结构ListNode:struct ListNode {//链表数据结构 int val;//结点值 Li...

2020-05-19 11:02:59 246

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除