自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉树的层级遍历

zigzagLevelOrder交叉逆序返回每层列表。levelOrderDESC倒序返回每层的列表。simpleLevelOrder广度优先遍历。nLevelOrder返回n叉树的每层列表。levelOrder返回每层的列表。

2023-08-14 21:56:24 67

原创 二叉树的结构和常见概念

节点的度:一个节点所有子节点的个数为该节点的度树的度:树中的最大的节点的度叶节点、终端节点:度为0的节点非终端节点、分支节点:度不为0的节点树的深度:树的层数。

2023-08-14 19:57:12 86

原创 Hash和双向链表实现LRU

插入与查询算作使用,被使用的数据放到表头,不怎么被使用的数据就被使用的数据移到表尾。类似于FIFO算法,不同点在于,如果表内数据被使用,就将被使用数据移到表头。LRU算法为最近最久为使用,当空间满时,将最久未使用的数据释放。双向链表可以方便的找到表头和表尾以及附近的结点。HashMap可以通过key快速寻找所需数据。

2023-07-31 22:32:49 207 1

原创 栈和队列的互相实现以及n数之和

进行遍历,先确定一个数nums[first],如果nums[first]==nums[first-1]&&first>0,说明值相同,使用continue遍历下一个值;当second<third&&nums[third]+nums[second]>target时,third--,如果second==third,退出second的循环,如果nums[second]+nums[third]==target,找到一组答案。第一层for循环确定一个数nums[i],第二层for循环确定另一个数nums[j]。

2023-07-29 23:12:33 70

原创 Hash基础和队列基础

hash的存储计算公式为模运算,若数组array存放1到15到一个大小为7的hash表中,存储位置计算公式为:index=number mod 7。将Hash表的每个单元作为链表的头结点,出现碰撞就将输入值作为index位置的链表的下一个结点。若要查找13则index=13%7=6,直接访问array[6],时间复杂度为O(1)。当不同的输入值算出的存储位置相同时,称为碰撞,例如1和8的index均为1。hash扩容机制:到达hash长度的0.75就将长度拓展为原来的2倍。发生了碰撞就寻找下一个空的地址。

2023-07-29 21:18:30 23

原创 栈的运算器、逆波兰式计算

读取到运算符进行运算前需要得到两个数字,preSign先为'+',将第一个数字和0进行相加的和num后压入栈,再读取后一个运算符preSign = 新的运算符,继续读取下一个数字,根据preSign运算后压入栈。逆波兰式按顺序运算,将数字入栈,读取到运算符就pop()两次得到要运算的两个数字,在将运算结果入栈。加减运算直接用x和-x入栈,乘除运算需要和输出的栈顶元素进行运算后入栈。给与字符串表达式s="3+2*2"

2023-07-28 22:16:03 21 1

原创 栈的括号、最小、最大问题

minStack.peek():x),可以在初始化时minStack.push(Integer.MAX_VLAUE),或者在每次push()时判断stack是否isEmpty(),没有则直接minStack.push(x),否则进行判断。使用map来记录key(左括号)和value(右括号),遇到左括号就入栈,遇到右括号就与栈顶元素比较,不匹配则return false。leetcode20:给定一个只包括'(',')','[',']','{','}',的字符串s,判断字符串是否有效。

2023-07-28 21:45:46 27 1

原创 算法通关村——手写栈

【代码】【无标题】算法通关村——手写栈。

2023-07-27 23:58:26 58 1

原创 数组与双指针

将元素加入set集合中,因重复加入时而失败时,删除要加入元素的对应元素,最后剩下的元素为出现了一次的元素。二进制位运算,异或结合律,相同为0,相异为1,两个相同的数异或后得0,0异或其它数仍为其它数。找到nums[right]==0,与nums[left]进行交换,left++;找到nums[right]==1,与nums[left]进行交换,left++.当times==0时,改变result,再令times=1;如果nums[1]==nums[0],times+1;

2023-07-27 23:30:52 34 1

原创 算法通关村——数组双指针

双指针:使用两个变量对一个数据结构进行处理。

2023-07-26 21:20:15 77 1

原创 算法通关村——数组的增删查改

数组array从0开始记录,设长度为length,第一个为array[0],最后一个为array[length-1]。数组中的个数为size,size可能和length不一样,可能100的空间只用了10。

2023-07-26 15:51:33 64 1

原创 算法通关村第二关——链表反转问题解析

新建虚拟头结点dummy,dummy.next=head,新建结点pre,pre为left的上一个结点,新建cur结点,cur为当前操作结点(从left到right),新建next结点,next为cur的下一个结点,next=cur.next,cur.next = next.next, next.next=pre.next, pre.next=next。输入:1,2,3,4,5 left=2,right=4。输入:1,2,3,4,5,6,7,8,9。输出:2,1,4,3,6,5,8,7,9。

2023-07-20 22:10:45 33

原创 链表中的环问题

快指针的路程为A->B->C->B->C->B->......->C,慢指针的路程为A->B->C->B->......->C,x+y+(z+y)*n=2(x+y),n*z+(n-1)y=x,(n-1)(y+z)+z=x,(n-1)len+z=x[len为环的长度],即从链表头开始到环入口位置 与 快慢指针相遇位置到环入口位置+(n-1)个环的长度(在环入口位置再走n-1个环的长度仍在环入口的位置)相等。快慢指针速度差为一次走一步,且快指针速度为慢指针的两倍,所以若有环,则快指针一定会与慢指针相遇。

2023-07-20 20:25:32 24

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

新建结点newHead获得递归方法返回的结点,这层递归的head.next.next=head,head.next=null(反转head和head.next),这层反转完成,返回newHead(newHead为这层反转链表的头结点)。遍历cur,令next=cur.next,cur.next=pre(cur成为反转链表头结点),pre=cur(pre也成为了反转链表头结点),cur=next,最后返回pre。对未反转的链表进行遍历,将元素作为反转链表的头结点1<-2<-3<-4 5->null。

2023-07-20 12:31:35 24

原创 算法通关村第一关——链表经典问题之白银挑战笔记

1、先遍历链表得到长度len,k=k%len,需要将进行链表拼接,先寻找旋转后的头结点,fast先走k步,slow与fast再同时走,fast.next走到null时,slow走到倒数第k+1个元素,即旋转后头结点前一个结点,获取slow.next结点(旋转后头结点post),slow.next=null,fast.next=head,返回post。1、创建一个新链表,将两个有序链表进行遍历,比较val值,将更小的结点接入新链表,相同则都接入新链表,一个链表遍历完后,将另一个链表剩下部分都接入新链表。

2023-07-18 15:38:55 314 1

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

current不等于last,则current的next的prev为插入结点,插入结点的next为current的next,插入结点的prev为current,current的next为插入结点。若插入位置在1之后,需先得到插入位置的前一个结点pNode,pNode的next置为插入结点,插入结点的next置为pNode的next,返回链表。若增加在表尾,且链表为空,则first与last均为插入结点;链表不为空,则last的next置为插入结点,插入结点的prev置为last,再令last置为插入结点。

2023-07-16 21:05:48 221 2

空空如也

空空如也

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

TA关注的人

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