算法通关村
文章平均质量分 68
糯米*
这个作者很懒,什么都没留下…
展开
-
青铜挑战——队列的构建
队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,即我们常说的FIFO(first in first out)先进先出。队列实现方式也有两种形式,基于数组和基于链表。对于基于链表,因为链表的长度是随时都可以变的,实现起来比较简单。如果是基于数组的,会有点麻烦,我们将其放在黄金挑战里再看,这里只看一下基于链表实现的方法。原创 2023-08-08 13:52:48 · 73 阅读 · 0 评论 -
白银挑战——栈的金典算法问题
遍历字符串的时候,遇到左半边符号就入栈,遇到右半边符号就与栈顶的符号比较,不匹配就返回false。创建两个栈,将字符串转为byte类型存入stack1中,遍历stack1,判断stack2中的peek是否为对应的另一半,不是则入栈,是则stack2出栈,最后判断stack2是否为空若为空则证明合理。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。输入:s = “()” 输出:true。原创 2023-08-07 10:09:46 · 81 阅读 · 1 评论 -
青铜挑战——栈的实现
栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。理论上递归能做的题目栈都可以,只是有些问题用栈会非常复杂。栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进行。一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。原创 2023-07-31 23:03:20 · 71 阅读 · 1 评论 -
青铜挑战——不简单的数组增删改查
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [2,5,6]。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。两次循环可以优化成一次,假如我们在i和i+1位置出现了nums[i]>nums[i+1],而在另外一个地方j和j+1出现了nums[j]原创 2023-07-25 12:00:11 · 67 阅读 · 0 评论 -
算法通关村第二关——终于学会链表反转了
可以先建立一个虚拟节点ans,这样可以很好的简化我们的操作。只需要遍历链表将每个节点拆下来,插入到ans后就可以实现反转。输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。定义2个指针pre和curr,curr指向当前节点pre指向前一个节点,让这两个节点的指向改变。定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。0原创 2023-07-20 15:07:25 · 53 阅读 · 1 评论 -
算法通关村第一关——链表经典问题之两个链表公共子节点
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 B 中,相交节点前有 3 个节点。遍历两个链表,比较节点是否相等,返回相等的节点。原创 2023-07-19 20:16:06 · 295 阅读 · 0 评论 -
算法通关村第一关——链表青铜挑战笔记
头部:只将插入节点的后继节点指向head(newNode.next=head),然后head重新指向插入节点(head = newNode)单向链表就像一个铁链一样,元素之间相互连接,包含多个结点,每个结点有一个指向后继元素的next指针。中间:找到要删除节点的前驱preNode,preNode.next = preNode.next.next。中间:需要先找到要插入位置的前驱节点,将插入节点的指向后继节点,再将前驱节点的指向插入的节点。尾部:找到最后一个节点的前驱节点指向null即可。原创 2023-07-18 15:09:05 · 350 阅读 · 2 评论