自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 八股文:集合知识图谱——HashMap篇

以map为轴心来讲述Java集合体系一、HashMap原码剖析二、HashMap的横向比较

2022-02-18 16:01:15 1196

原创 数据结构:AVL?撕就完了

写一棵AVL一、Node结点定义二、逐步实现AVL1、BST1)insert(int insertVal)方法2)remove(int removeVal)方法2、计算平衡因子函数calBalance()3、旋转方法rotate()一、Node结点定义可以自行设计自己在这里仅增加了一项——平衡因子的记录,用于旋转时判断类型public class Node { int val; int balance; // 左子树高 - 右子树高 Node left; Node right; pub

2021-11-25 15:13:18 190

原创 算法合集:回溯

回溯一、简单回溯——子集类回溯:选?不选?1、例题说到回溯的算法题,就像是——好像会写但好像又不会写。回溯倒像是一种暴力枚举,另一种形式的dp递推——推不动回去不就是了嘛,搭配上剪枝或能比较快速的推动算法。一、简单回溯——子集类回溯:选?不选?诸如子集,全排列这种类型的题目就属于简单类型的回溯——只需要考虑当下是选还是不选听上去挺抽象的,结合例题就很好理解1、例题1)例题一:LeetCode 77 组合说白了从1 ~ n,选取k个数,返回所有组合对一个链表,用递归进行维护,当长度小于k时表示

2021-10-28 22:15:01 235

原创 算法合集:前缀和——听说有人说我简单?

前缀和:你当真会用我吗?

2021-10-18 00:47:17 264

原创 算法合集:滚动哈希——干脆叫前缀和得了

滚动哈希——Rabin-Karp

2021-10-02 14:01:29 3092

原创 算法合集:动态规划(二)——状态dp

动态规划(二):状态dp

2021-10-01 15:08:44 1008 2

原创 算法合集:动态规划(一)——线性dp

动态规划(一):线性dp一、常规线性dp1、简单的线性dp2、稍复杂的线性dp二、字符串类线性dp专讲dp可能简单算法中的难度天花板了,但dp并非完全摸不头脑,下面我们从简单题入手来讲解dp一、常规线性dp线性dp:从一口气头推到尾,各个子问题相对独立线性dp一般比较明显的看出递推公式,并且比较容易优化1、简单的线性dp简单是指:dp的定义简单,子问题容易找,但实现起来并不简单,有些细节需要注意1)例题:LeetCode 322 零钱兑换dp定义比较清晰维护数组dp,dp[i]表示以

2021-09-22 22:41:14 1296 1

原创 数据结构:字典树

字典树一、字典树介绍二、字典树实战字典树类似于二叉树,内部结构并不复杂,在前缀方面百试百灵,却没有红黑树,AVL那么多变化,赶紧码起来一、字典树介绍字典树并不是死的,其内部其实是多变的,在介绍中会讲解可能的变式1、定义结点与二叉树一样,结点需要存储其数据,以及下一个结点的,若结点中只包含字母,我们有两种方法连接到next结点HashMap型:Node中用hashmap来连接到下一个结点,适用于字母类型少的情况数组型:Node中用数组来连接到下一个结点,适用于字母类型多的情况privat

2021-09-20 16:56:42 165

原创 算法合集:位运算——就两个数字还想劝退我?

位运算

2021-09-20 12:13:38 445

原创 数据结构:树状数组:姐来展示下什么叫高端前缀和

树状数组:升级版前缀和我们知道前缀和是十分高效的,可以以O(1)的速度求出任意一段连续区间的和,但缺点是数组不可修改,但树状数组的出现提供了转机一、位运算:lowbit()树状数组是基于位运算的,所以在介绍树状数组前要介绍lowbit()lowbit(x):x在二进制下最低位的1所对应的十进制下的数值乍一看有些拗口,举些例子:lowbit(9) = lowbit(1001) = 1lowbit(40) = lowbit(101000) = 8lowbit(58) = lowbit(11

2021-09-18 23:19:03 170

原创 数据结构:并查集:“一条语句你能秒我?我当场...”

并查集:武林门派大乱斗

2021-09-15 13:58:04 107

原创 算法合集:二分——pdd每次都能砍一半吗?

二分——分治的孪生兄弟

2021-09-12 17:11:37 536

原创 算法合集:“分治”思想——算法帝国的”推恩令“

分治思想及其衍生想法算法中有许多特殊的解法,不求一步到位的解出题目,而是通过把大问题简化成小的子问题来解决。实现形式可以借用递归。另外dp的思想也与之类似,都是定义子问题 + 设定边界条件来完成算法。一、全局分治全局分治的意思是,需要对全局进行分治才能得出最后的答案,需要维护全局的状态空间(不重也不漏)才能找到最终结果。 一般题目的暗示语句为:“所有符合条件的解”的选择类型的算法,或是类似于“将数组排序”的维护类的算法。1、题目一:LeetCode 23 合并K个升序链表合并两个升序数组是很好写的

2021-09-11 23:37:51 224 1

原创 Java第十四课——相声和群口相声

Java第十四课——相声和群口相声相声,顾名思义就是一个逗哏一个捧哏,也就是一唱一和,也就相当于双向的交流。群口相声同理,三人及三人以上,也就是群聊的效果。那么这次就来实现一个服务器和客户端双向的交流,也是客户和客户之间的交流。其实二者实现过程同理,就拿wx来举个例子,我输入了一条消息,先发送给服务器,而这条消息是需要被我自己和接收消息的人看到的,所以服务器只是获取到我自己和接收消息的人的输出流,输出这句话就完成了。群聊同理,获取当前群聊所有人的输出流,全部输出就可以了。先把单向通信的代码放上服务器

2021-02-03 20:48:35 190

原创 Java第十三课——客户端与服务器单向多样化数据传输

Java第十三课——客户端与服务器单线多样化数据传输之前我们完成了基本的服务器和客户端的额雏形,能实现单字节的发送,那么接下来就需要尝试多样化的数据传输。毕竟在我们日常生活中,聊天不可能每次都发送一个字节,我们所使用和汉字都是char(两个字节),那么如何来完成多样化传输,来发送大量文字,文件,视频呢?这节课内容都按上节课的基础上来改动服务器端:public class Server { ServerSocket serversocket; public void create(){ try

2021-01-28 17:06:54 281

原创 Java第十二课——客户端与服务器的单线通信

Java第十二课——服务器与客户端的单线通信一、通信是如何进行的?平时我们用微信、QQ进行聊天时,我们是如何把消息发送出去的?对方为什么能接到消息?两人甚至在地球的两极也能接到消息,这是如何实现的?我们知道,平时日常的对话需要面对面的进行,而其实在互联网下也是一样的。在通信刚开始时,两人必须在同一网络下才能进行通信,通过访问对方的IP地址,找到其开放的端口进行通信,先来说一下什么是IP地址?什么是端口?百度百科是这么解释的:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每

2021-01-25 20:56:19 303

原创 Hashmap和Hash码

浅谈Hashmap和Hashcode参考文章:为什么重写equals就必须重写hashCodeHashMap底层实现原理震惊!!!原来HashMap的底层实现原理竟然是。。。?java中hashmap的实现原理与底层数据结构最近在写山脉生成算法时,碰到一些问题,所以就研究了一下浅层的Hashcode和Hashmap。就按照自己的理解来讲一下:一、时间复杂度在将之前先了解一下时间复杂度这里有一篇讲的比较好的文章,我就不展开聊了参考文章:一套图搞懂“时间复杂度”可见追求最优算法的

2021-01-01 15:58:35 627

原创 Java第十一课——多线程实现飞机大战

Java第十一课——多线程实现飞机大战一、补充讲解一下线程在第九课的基础上补充两点:1、启动线程使用start()方法而不直接使用rin()方法,因为线程是一直重复执行的,调用run方法只会执行一次,所以用start方法启动线程2、当小球跑的很远,跑出窗体时,便可以把小球移出去,用remove()方法list.remove(ball)可以给小球加入一个getX()方法获取小球的x坐标,当x大于窗体长度时移除。因为小球是放在队列里面的,所以队列里可能有很多小球,那么可以用遍历的方式获取到要移除的小

2020-10-31 19:04:39 1107 1

原创 Java第十课——封装性和哈希表实现五子棋AI

Java第十课——封装性和哈希表实现五子棋AI

2020-10-29 20:10:54 362

原创 Java第九课——多线程

Java第六课——多线程首先先了解一下什么是多线程:多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。通俗的说就是在同一时间做多个任务,他们之间不能有先后顺序,而是同时进行。那么为什么要使用多线程呢?举个例子,比如飞机大战游戏,假如按一下空格键就会发射一颗子弹,如果想实现子弹连发,就需要按下多次空格键。如果不使用多线程,就需要等上一个子弹飞出去了,完成了它应该要走的轨迹,下一颗子弹才会出发。使用多线程的话,二者执行没有影响,按下空格就会往发射子弹,子弹的

2020-10-26 17:00:16 258

原创 Java第八课——实现五子棋

Java第八课——五子棋上节课讲了数组,这节课利用数组完成五子棋,当然想完成其他的棋也可以借这节课的内容当作参考。首先在完成作品之前,先明确思路。需要一个界面,监听器,以及可能用到的其他类。在窗体上需要画出棋盘和棋子。监听器中要MouseListener和ActionListener(按钮可以用于悔棋)。其他类可以是判断输赢的类,或是用于将鼠标点下的位置转换成棋盘坐标的方法第一步:窗体和监听器的雏形1、因为窗体上需要画出棋盘和棋子,所以在创造窗体时可以继承(extends)父类,更方便作图。另外在设

2020-09-20 15:37:08 380

原创 Java第七课——数组

Java第七课——数组先看一下定义:数组(Array)是一个集合,用于存放多个相同类型的数据,数组中的成员也叫元素。常见的数组类型有int,string,char等等创建一个数组:数据类型[ ] 数组名 = new 类型[长度];int[] arr = new int[10];这里创建了一个空的数组,若想一开始就加入元素可以用下面的方法数据类型[ ] 数组名={元素}在上一课中用到:String[ ] name={"直线","圆形","谢尔宾斯基三角形","康托尔方形集","门格海绵"};

2020-09-18 23:59:11 313

原创 Java第六课——画图板

Java第六课——画图板这节课画一个画图板,可以画线画圆,还可以通过递归画出好看的图案如:谢尔宾斯基三角形,康托尔方形集,甚至立体图门格海绵。首先创建一个窗体。定义一个类和一个方法。public class Draw{ public void show(){ JFrame frame =new JFrame(); FlowLayout layout=new FlowLayout(); frame.setLayout(layout); frame.setSize(1000,1000);

2020-09-17 20:06:59 237

原创 Java第五课——递归

Java第五课——递归递归指的是函数调用自己,可以简化代码,下面以阶乘、斐波拉契数列和汉诺塔的实现来介绍阶乘。阶乘首先创建一个类public class Recursion{ }实现递归的关键在于找到终止条件,就以阶乘为例,要想求n的阶乘,也就是求n×(n-1)×(n-2)…×2×1,当到1的时候就终止了,也就是if(n==1)时终止,不等于1的时候就调用自己且把n-1代入。若函数为int f(int n)则2的阶乘: 2×f(2-1) = 2×13的阶乘 3×f(3-1) = 3×2×f(

2020-09-17 11:44:07 114

原创 Java第四课——登录界面

Java 界面goal:点击按钮,系统输出"按下"先了解一下接口和事件监听接口:什么是接口,就比如手机和电脑,有许多接口,有耳机接口,USB接口,键盘接口,充电接口。接口就类似于一个规则,比如键盘接口就是用来和键盘连接的,不能接错,也无法改变,所以接口是一个抽象类,是不能创建对象的。接口的创建: public interface 接口名{ }接口的属性:属性类型 属性名=属性的初始值...

2020-09-15 21:16:54 301

原创 Java第三课——事件监听

Java第三课——事件监听先了解事件监听事件监听也就是对事件源发生的动作做出反应,事件源动作就是事件源对象的动作,包括但不限于鼠标移动,鼠标点击,键盘的敲击。而究竟对键盘还是鼠标做出反应就要添加不同的监听器,每个监听器都有各自处理各类事件源的方法。监听器类的创建先创建一个类Listener,并用关键字implements一个接口(ActionListener动作监听器,也就是鼠标监听器;KeyListener键盘监听器)。利用系统补齐所有方法。至于方法写什么就看添加该监听器的对象了,在下一课会举例。

2020-09-15 20:09:30 321

原创 Java第二课——类与对象

Java第二课了解类与对象前面介绍过,类是一个大范围,比如说一类笔,则它就包括黑笔、蓝笔等等,但当我想要确定是我写字用的笔时,类就显得范围太大了,那么这时就需要对我的笔创建一个对象类:把具有相同属性或功能的对象归为一个类别,对这些类的共性进行描述对象:是具体的实例,而一个对象是具有属性的:大小,颜色,牌子,用途等等类的创建:public class 类名{ }对象的创建:类 对象的...

2019-10-21 16:49:57 169

原创 Java第一课——类及其创建

#Java 第一课goal:输出Hello World!(自己喜欢的一句话)For the first,先了解一下什么是类:java中的类与我们生活之中的类类似,比如:一类人,一类书等等。我们所写的代码便是围绕类所展开的。比如一个类——书。而这个类是干嘛的呢?那么它的作用是拿来看的。在Java中的类是需要自己定义的,每个类都有一个主方法,也就是这个类所要做的事。那么比如这里定义一个类——He...

2019-10-19 08:13:20 339

空空如也

空空如也

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

TA关注的人

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