算法学习
文章平均质量分 70
傻笑不累
这个作者很懒,什么都没留下…
展开
-
队栈和 Hash 的经典算法题
所以我们可以考虑再引入一个栈,让两个栈的栈底相连,每次入队时,依次入右边栈,而出队时,先将右边栈中元素依次入左边栈,然后再从左边栈依次出栈即可。利用两个队列进行实现,在元素做入栈操作时,可以先将元素入队 queue2 中,然后将 queue1 中的元素再依次入到队列 queue2 中,再交换 queue1 和 queue2 的引用,最后得以实现后入队的元素在 queue1 的最前面。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。原创 2023-10-12 08:55:01 · 83 阅读 · 0 评论 -
队列和 Hash 的特征
散列算法又称为哈希算法,主要作用就是将任意长度的二进制明文,映射为较短的二进制串也就是哈希值,并且这种二进制明文很难映射成相同的哈希值。队列是一种常用的数据结构,遵循先入先出(First-In-First-Out,FIFO)的原则,就是一个节点入队,出队时出先入队的元素。哈希(Hash)又被称为散列,是不管输入数据的长度有多长,最终都会通过散列算法将其以固定长度输出,这个输出的值就被称为哈希值。队列底层可以利用数组或者链表进行实现,以下是利用链表来实现。原创 2023-09-12 21:47:16 · 104 阅读 · 0 评论 -
栈的经典算法问题
此时我们可以定义两个栈,其中一个在入栈的时候只将当前最小的元素入栈,我们称之为最小元素栈。另一个正常入栈元素,当需要获取最小元素时,直接返回最小元素栈中栈顶的元素即可。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。表示右括号,再每次遍历字符串的时候如果是左括号就直接入栈,如果是右括号,就判断与栈顶元素在。设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。是否匹配,若能匹配则出栈,不能则不是有效括号原创 2023-09-05 08:17:49 · 100 阅读 · 0 评论 -
双指针的思想以及应用
双指针其实就是两个变量,用来处理数组,字符串等问题很方便。而双指针在平时用的最多的两种分别是:两个指针即可以一快一慢向后走,这种指针一般称为快慢指针,还可以从两边向中间走,这种指针一般称为对撞型双指针。原创 2023-08-28 09:00:59 · 115 阅读 · 1 评论 -
理解手写栈
栈是线性表中的一种,也被称为是访问受限的线性表,作用和数组类似,都是存储数据的一种结构。和数组不一样的是对数据的操作,以及存储数据的结构。原创 2023-08-31 21:35:00 · 57 阅读 · 0 评论 -
爱得起的数组
在遍历数组的过程中遇到和待删除元素相等的数组元素时,记录其位置,然后将当前位置之后的元素依次向前移动一位即可完成删除(其实相当于是让后面的元素覆盖了前面的元素),最后将数组内已赋值元素数量减一。数组单调说明数组中的元素要么都是递增的,要么都是递减的。循环赋值的优点是赋值方便,不需要自己一个一个手写需要赋值的元素,但是这种方式缺点也很明显,就是无法指定需要赋值的元素。可以从数组一的最大索引值开始向前遍历,一边遍历一边将数组一和数组二中已赋值的较大元素赋值给数组一的最大索引。的优点相反,就是有点点累。原创 2023-08-15 07:27:07 · 48 阅读 · 0 评论 -
链表反转的拓展问题
由于整数是从高位向低位按照顺序存储在链表中的,所以在给这个链表加 1 时需要先进行反转,然后运算结束之后再反转回来即可得到预期结果,代码如下。利用快慢指针,一边找链表的中间位置,一边进行反转,最后同时遍历已反转部分和未反转部分,判断其节点值是否相等。将链表中待反转的区间内,每遍历一个节点,就将其重新插入这个区间的起始部分,以此类推。循环,在循环内出栈节点值,然后将该值进行加一,加进位值,得到。将待反转的部分截取出来,单独反转后再接入原链表,代码如下。,以此来创建节点,利用头插法插入。即可得到加一后的结果。原创 2023-08-11 11:59:15 · 54 阅读 · 1 评论 -
链表高频面试算法题解析
在出栈的同时,从链表的头部开始向后遍历,并将栈中的元素与链表中的元素进行比较,这样操作的目的是比较栈中的元素与链表中的对应元素是否相等。定义三个指针,其中利用遍历让两个指针一个指向待删除部分的前一位,一个指向待删除部分的后一位,令第三个指针指向待插入链表的最后一位,即可将待删除部分替换为待插入链表。创建新链表,同时遍历两个链表将两个链表中较小的元素优先接入新链表,直到某一个链表为空后,再将另一个非空链表中未遍历到的元素接入新链表中。步,然后快慢指针再同时向后遍历直到快指针遍历到链表的末尾时,则慢指针。原创 2023-08-02 21:06:28 · 60 阅读 · 1 评论 -
手写链表反转
由于本人还在学习中,如果有问题,希望能请各路大佬能够指点一二,😊😊😊。原创 2023-08-03 21:07:06 · 126 阅读 · 0 评论 -
小白也能学会的链表(Java)
在 Java 中单向链表主要是利用类来进行构造,且一个链表通常是有多个节点,节点与节点相连形成一种链式结构。在链表插入元素之前需要引入一个头指针 head 它的 next 指针一般指向的是一个链表中的首元素。与单向链表不同的是,双向链表多一个可以指向前一个节点的指针 prev。需要遍历整个链表找到待插入节点的前一个节点之后再进行插入操作。让待删除节点的前一个节点直接指向待删除节点的后一个节点。将最后一个节点的前一个节点直接指向 null 即可。再将待插入节点的前一个节点指向待插入节点。原创 2023-07-19 15:14:02 · 206 阅读 · 0 评论