自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LRU的设计与实现

如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。Hash的作用为在get()时快速获取数据,通过缓存数据的键映射到其在双链表中的位置,key是键值,value就是我们自己封装的数据node,如果能get到,说明此时有这个元素,返回node.value,如果不能,就返回-1。2. 如果不存在,则创建新节点并添加到双链表的头部,在哈希表中添加对应的key和node,然后判断双链表的节点数是否超出容量,如果超出容量,则删除双链表中的尾部结点,并删除哈希表中对应的项。

2024-03-08 13:10:32 235 1

原创 算法通关村——队列、栈和Hash的经典算法

队列先进先出,利用两个队列,首先用一个空队列queue2存储进入的元素,再将队列queue1中的所有元素放入queue2中,此时,相当于后面进入queue2队列的元素在队列的首部,再将queue1和queue2互换,即queue2只作为入队的工具,真正存储栈数据的是queue1。利用两个栈,首先将元素压入栈inStack,要取出元素的时候再将所有的inStack中的元素压入outStack栈中,此时经过两次入栈,outStack栈中的元素已经实现了先进先出,再调用push()方法就可取出第一个入栈的元素。

2024-01-24 10:12:56 953

原创 算法通关村——Hash和队列的特征

哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出值就是散列值。通过取模的方式,将元素放入Hash表中,例如将1到15这些数存入大小为7的Hash表,存储位置的计算公式为 | index=number % 7将1到6存入时继续7到13存入时继续14和15。

2024-01-22 08:45:36 441 1

原创 算法通关村第四关——表达式问题(黄金挑战)

给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在的范围内。不允许使用任何将字符串作为数学表达式计算的内置函数,比如eval()。

2024-01-21 10:30:46 408 1

原创 算法通关村——栈的经典算法问题

如上图,第一个图是元素入栈时的实际的图,第二个是我们设计的辅助栈,本题的关键是取出栈中的最小值,此时可以设计一个辅助栈,和正常入栈时同步插入和删除,用于存储当前元素入栈后栈内的最小值。在遍历字符串的时候,遇到左半符号就入栈,遇到右半符号就取栈顶元素作比,不匹配就返回false。但其中的popMax()有点例外,popMax()的意思是要取出当前栈中的最大值,由于我们都知道当前栈中的最大元素值,因此。,当某个时刻,第一个栈的出栈元素等于当前栈中最大的元素值时,就找到了最大的元素,因此我们。

2024-01-19 12:33:20 329 1

原创 算法通关村——栈和基于数组或链表实现栈

栈:后进先出栈的操作:push(E):增加一个元素Epop():弹出元素Epeek():显示栈顶元素,但不出栈empty():判断栈是否为空补充:top有的地方指向栈顶元素,有的地方指向栈顶再往上的一个空单位,这个根据题目要求设计就好,本文采用指向栈顶空位。这里简单展示一下java.util包下的栈的基本定义和用法。while(!//只显示,不出栈//出栈并显示。

2024-01-18 08:46:46 473 1

原创 算法通关村——第三关|黄金挑战

0与其他数字数字异或结果还是那个数字,要操作的数字中除了某个数字只出现了一次之外,其他数字都出现了两次,所以可以定义一个变量初始为0,用这个数字与数组中的每个数字做异或运算,并将这个变量值更新为那个运算结果,直到数组遍历完成,最后得到的值就是数组中只出现了一次的数字。首先HashMap中key就是数组中的元素,value是元素出现的次数,遍历数组统计所有元素出现的次数。例如:输入数组{1,2,3,2,2,2,5,4,2},由于数字2在数组中出现了5次,超过了数组长度的一半,输出2,如果不存在则输出0。

2024-01-17 11:12:10 493

原创 算法通关村——双指针的妙用

利用双指针思想,首先定义slow和fast两个指针,slow指针表示当前及之前的元素都是不重复的,fast则是一直往后面找不重复的元素,找到之后就将slow往后移一位,将arr[slow]=arr[fast]即可,然后fast继续往后移,找不重复的元素。例如[1,2,3,4,5,6,7]中,先反转为[7,6,5,4,3,2,1],再将前三个[7,6,5]和后4个[4,3,2,1]反转为[5,6,7]和[1,2,3,4]即可。上面的为快慢指针,还有就是从两端一起走到中间的称为对撞型指针或相向指针。

2024-01-05 09:42:12 983 1

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

5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。从后往前,将最大的元素插入nums1中的末尾。个元素表示应合并的元素,后。中,使合并后的数组同样按。

2023-12-28 15:02:46 308 1

原创 算法通关村第一关——黄金挑战 | 环与双向链表

按照快慢的方式寻找到相遇的位置,然后将两指针分别放到链表的表头和相遇的位置,以相同的速度推进,即可找到环的入口。在确定环的时候利用的hash也可以查找环形的入口,只是返回不是true和false了,返回的是结点。第二种情况:相距两个空格,slow走一步到达4,fast走两步到达3,此时又是第一种情况。遍历的时候将元素放入map中,如果有环就一定会发生碰撞,碰撞的位置就是环的入口。第一种情况:相距一个空格,slow走一步,fast走两步,则在三的位置相遇。链表中有一个环,其尾部连接到第二个节点。

2023-12-27 14:04:35 1617 1

原创 算法通关村第二关——黄金挑战 | K个一组反转链表

给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

2023-12-19 11:07:38 456 1

原创 算法通关村第二关——指定区间反转和两两交换反转

给你单链表的头指针head和两个整数left和right,其中。请你反转从位置left到位置right的链表节点,返回。

2023-12-18 08:46:09 1287

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

前一篇中就已经用到了可以利用链表反转来进行解答回文链表的问题,但当时初看到的时候还懵了一下,还好还记得一点最后还是看懂了。链表反转不论怎样都是链表中的重轴戏,所以在此处先学会链表反转的最基础的三种方法。给你单链表的头节点head,请你反转链表,并返回反转后的链表。

2023-12-15 09:55:42 374

原创 算法通关村第一关|白银挑战——链表高频面试算法题

遇到问题时首先将常用的数据结构和算法思想都想一遍常见的数据结构有数组,链表,队,栈,Hash,集合,树,堆,常见的算法思想有查找,排序,双指针,递归,迭代,分治,贪心,回溯和动态规划。

2023-12-12 17:04:53 1642

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

单链表的简单增删

2023-12-09 11:02:09 350 1

空空如也

空空如也

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

TA关注的人

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