自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构的开始——单链表

特点:①缺点:只能连续访问,效率低,但是通过双向链表缓解了该问题②优点:有助于添加元素,扩容方便,没空间限制,不会溢出,可以存储很多个元素。因此,如果我们在算法里使用了虚拟结点,则要注意如果要获得head结点,或者从方法(函数)里返回的时候,则应使用dummyNode.next。在链表中 ,每个点都由值和指向下一个结点的地址组成的独立的单元,称为一个结点,有时也称为节点,含义都是一样的。不是头节点则需要先遍历到头节点的前一个节点,然后nodeInsert.next = pNode.next,

2023-10-15 10:11:46 87 1

原创 青铜挑战——队列的构建

队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,即我们常说的FIFO(first in first out)先进先出。队列实现方式也有两种形式,基于数组和基于链表。对于基于链表,因为链表的长度是随时都可以变的,实现起来比较简单。如果是基于数组的,会有点麻烦,我们将其放在黄金挑战里再看,这里只看一下基于链表实现的方法。

2023-08-08 13:52:48 73

原创 白银挑战——栈的金典算法问题

遍历字符串的时候,遇到左半边符号就入栈,遇到右半边符号就与栈顶的符号比较,不匹配就返回false。创建两个栈,将字符串转为byte类型存入stack1中,遍历stack1,判断stack2中的peek是否为对应的另一半,不是则入栈,是则stack2出栈,最后判断stack2是否为空若为空则证明合理。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。输入:s = “()” 输出:true。

2023-08-07 10:09:46 80 1

原创 青铜挑战——栈的实现

栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。理论上递归能做的题目栈都可以,只是有些问题用栈会非常复杂。栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进行。一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。

2023-07-31 23:03:20 71 1

原创 白银挑战——双指针思想以及应用

看个例子,从下面序列中删除重复元素[1,2,2,2,3,3,3,5,5,7,8],重复元素只保留一个。slow表示当前位置之前的元素都是不重复的,而fast则一直向后找,直到找到与slow位置不一样的 ,找到之后就将slow向后移动一个位置,并将arr[fast]复制给arr[slow],之后fast继续向后找,循环执行。输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。

2023-07-27 15:15:49 79 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

原创 白银挑战——链表反转拓展

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回。输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]输入:head = [5], left = 1, right = 1 输出:[5]就是先找到需要反转区间的前一个节点,然后将要反转的节点依次插入到后面。首选要找到需要反转的区间,将要反转的区间切下来反转,后又接回原链表。

2023-07-23 16:34:45 77

原创 算法通关村第二关——终于学会链表反转了

可以先建立一个虚拟节点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

原创 算法通关村第一关——链表青铜挑战笔记

头部:只将插入节点的后继节点指向head(newNode.next=head),然后head重新指向插入节点(head = newNode)单向链表就像一个铁链一样,元素之间相互连接,包含多个结点,每个结点有一个指向后继元素的next指针。中间:找到要删除节点的前驱preNode,preNode.next = preNode.next.next。中间:需要先找到要插入位置的前驱节点,将插入节点的指向后继节点,再将前驱节点的指向插入的节点。尾部:找到最后一个节点的前驱节点指向null即可。

2023-07-18 15:09:05 350 2

空空如也

空空如也

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

TA关注的人

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