自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2024 重整行装再出发

先介绍一下我的情况,我是来自河南某大学的一名计算机类学生,平心而论,当时在高考完之后并没有想过自己会被计算机专业录取,当时报的时候应该是电子类专业或者是自动化类专业的几率要大一些,因为这些学科与我的分数更加匹配,结果,阴差阳错的让我被计算机类专业录取了,其实当时我其实还蛮庆幸的,因为计算机专业是大家口中的热门专业,但是之后我的态度就发生了转变。今天是我开始写博客的50天的节点,也是我即将开始进行java部分学习的关键节点。

2024-01-26 20:02:45 407 2

原创 算法.图论-并查集

定义:并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等方法作用作用就是查找一个元素所在大集合的代表元素, 返回这个元素判断传入的两个元素是不是同属一个大集合, 返回T/F合并传入的两个元素所代表的大集团(注意不仅仅是这两个元素)并查集的时间复杂的要求就是实现上述的操作的时间复杂度都是O(1)下面是关于并查集的一些常见的操作的图示。

2024-09-19 22:48:11 913

原创 算法.图论-建图/拓扑排序及其拓展

拓扑排序的存在条件是在一个有向且无环图中的排序, 拓扑排序在某种程度上反应的是一件事的执行的先后顺序, 请看下图这张图中, 黑色的字符表示节点的名称, 蓝色的数字指的是该位置的入度是多少, 上面我们提到过, 拓扑排序的过程可以视为完成某一件事的先后顺序, 假设我们最终想要完成的任务是f, 那我们下面的字符的序列也就是完成最终事件的顺序拓扑排序不是唯一的, 比如下面的图在这张图中, 先完成a还是先完成b都是可以的, 所以产生的拓扑排序的情况就有两种,

2024-09-12 22:40:42 830

原创 MySQL-CRUD入门2

由上面的结论可以得到, 如果在where中通过别名进行筛选的话, 就不会筛选出来指定的结果,

2024-09-10 22:13:48 1310

原创 算法-双指针技巧

设置两个指针的技巧,其实这种说法很宽泛,似乎没什么可总结的有时候所谓的双指针技巧,就单纯是代码过程用双指针的形式表达出来而已。没有单调性(贪心)方面的考虑有时候的双指针技巧包含单调性(贪心)方面的考虑,牵扯到可能性的取舍。对分析能力的要求会变高。其实是先有的思考和优化,然后代码变成了双指针的形式。3)所以,双指针这个“皮”不重要,分析题目单调性(贪心)方面的特征,这个能力才重要。常见的双指针类型:3. 同向双指针4. 快慢双指针5. 从两头往中间的双指针6. 其他。

2024-09-08 22:34:24 1043

原创 MySQL-CRUD入门1

所有关于客户端的配置都在client节点下, 也就是说这个节点下的修改会对所有的客户端产生影响, 带exe文件的大部分都是客户端的相关文件, 如下图所示, 我们平时使用的mysql命令行窗口登录的时候用的就是图中的mysql.exe文件, 自己可以进行验证。端口这里是用的默认端口, 上面的文件配置已经是修改过路径的结果了, 原来的数据路径是C盘(系统盘)下面的, 这里我们需要找到data文件夹, 然后复制到你要移动的其他文件夹当中, 然后修改这个路径就可以完成修改。

2024-09-08 20:44:49 1700

原创 算法-滑动窗口技巧

1. 滑动窗口简介: 滑动窗口其实就是维持了一段区间(l边界与r边界), 并且对于这个窗口的两个边界来说, 左右指针都不会进行回退, 来求解一些关于字符组跟字串相关的问题(所以说我们的滑动窗口的大流程的时间复杂度一般都是O(n), 明显优于遍历每一个子区间的时间复杂度O(n^2)2. 滑动窗口的核心: 找到窗口的范围跟所求指标之间的单调性关系(这里的范围我们指的是对其中的单一窗口来说, 扩大或者缩小范围的影响)3. 滑动窗口的过程。

2024-09-05 00:04:12 671

原创 MySQL初阶-初始化数据

nameagegender张三20男李四22女以上就是数据库表格的直观展示形式。表格英文单词table。表是数据库存储数据的基本单元,数据库存储数据的时候,是将数据存储在表对象当中的。为什么将数据存储在表中呢?因为表存储数据非常直观。任何一张表都有行和列:行:记录(一行就是一条数据)列:字段(name字段、age字段、gender字段)每个字段包含以下属性:字段名:name、age、gender都是字段的名字。

2024-08-28 22:31:18 996

原创 MySQL初阶-安装与配置

cd命令切换到mysql的bin目录下,执行mysqld --initialize --console进行data目录初始化,此时会在控制台生成一个随机密码,下图红框中就是随机密码。mysql是一个命令,在bin目录下,对应的命令文件是mysql.exe,如果将bin目录配置到环境。注意:mysql默认情况下root账户是不支持远程登录的,其实这是一种安全策略,-uroot 表示登录的用户是root,u实际上是user单词的首字母。-p 表示登录时使用密码,p实际上是password单词的首字母。

2024-08-28 22:29:27 683

原创 算法-差分, 二维前缀和, 离散化

比如对于一个数组。

2024-08-14 00:19:28 1037

原创 算法数据结构必备篇章3

文章目录47. (必备)一维差分与等差数列差分48. (必备)二维前缀和, 二维差分, 离散化技巧49. (必备)滑动窗口技巧以及相关题目50. (必备)双指针技巧及相关题目51. (必备)二分答案法及相关题目52. (必备)单调栈上53. (必备)单调栈下54. (必备)单调队列上55. (必备)单调队列下56. (必备)并查集上57. (必备)并查集下47. (必备)一维差分与等差数列差分package class047;// 航班预订统计// 这里有 n 个航班,它们分别从 1 到 n 进行

2024-08-11 21:18:17 327

原创 算法-构建前缀信息专题

这里可能有人说为什么我们不用bigInteger这种类进行运算, 我们想说的是, 在计算机底层, 我们的算术运算都是位运算拼接出来的, 对于k位的数字 加减的运算的时间复杂度是 o(k) , 乘除的时间复杂度是o(k^2) , 因为我们的int, long这种的长度我们也可以认为是一个常数, 所以运算的复杂度是 o(1), 但如果数字过大的话, 我们就不能进行忽略了,这就会导致计算机的底层运算速度变慢, 所以我们取余的操作是必要的…int[] sum = { 1, 3 , 6 , 10 , 15 };

2024-08-09 23:59:22 1003

原创 算法-嵌套类递归解题套路

当遇到 ’ + ’ 或者是 ’ - ’ 的时候就直接入符号栈, 当遇到数字的时候, 要判断符号栈栈顶的元素是不是 ’ * ’ 或者是 ’ / ’ , 如果不是的话直接入栈, 如果是的话, 就从数字栈中弹出一个元素, 然后与当前数字运算完之后的结果入数字栈, 我们把上面的过程用图描述如下。这个题跟基本计算器返回的不一样的点就是, 我们最终返回的是一个TreeMap, 即每一个嵌套里面的原子数量的情况, 然后最后对这个红黑树进行遍历就可以得解。这道题是一道典型的嵌套类问题, 用递归求解的思路。

2024-07-19 15:09:14 444

原创 Javase-集合框架初步(JDK17&21)

集合是一种容器, 用来组织和管理数据的, 非常重要Java的集合框架对应的这套类库其实是对各种数据结构的实现每一个集合类底层采用的数据结构不同, 例如ArrayList集合底层采用了顺序表, LinkedList底层采用了双向链表, HashMap集合底层采用哈希表, TreeMap集合底层采用的红黑树我们对于集合框架的使用要求就是, 要知道什么场合下使用什么样的数据结构是最高效, 最合适的集合中存储的是引用, 并不是把堆中的对象存储在集合中, 是把对象的内存地址存储到集合中。

2024-07-17 16:03:33 686

原创 算法-经典递归解决排列组合

如何正确的处理递归。

2024-07-15 20:17:23 697 3

原创 算法-二叉树常见问题详解

其实就是求两个节点p,q在一颗二叉树的最近的公共祖先, 也是著名的LCA问题(该问题本身是很复杂的,我们先弄一个入门题), 我们知道, p,q对于一颗树来说, 他们可能在一支上(此时q或者是p就是最近的公共祖先), 又或者是分属于两颗不同的树, 此时树的根节点就是最近的公共祖先, 我们现在创建, 其实也就是dfs对左右子树进行深度优先搜索的思路), 比如下面这个例子。我们现在创建一颗树, 树的结构是[1,2,3,4,null], 看一下上面的代码的结果。但是二者不是同一棵树, 所以中序的序列化是有问题的。

2024-07-12 21:07:37 870 2

原创 算法数据结构必备篇章2

文章目录36. (必备)二叉树高频题目上37. (必备)二叉树高频题目下38. (必备)常见经典递归过程解析39. (必备)嵌套类问题的递归解题套路40. (必备)N皇后问题(含位运算求解)41. (必备)最大公约数, 同余原理42. (必备)对数器打表找规律的技巧43. (必备)根据数据量猜解法的技巧-天字第一号重要技巧44. (必备)前缀树原理与代码详解45. (必备)前缀树的相关题目46. (必备)构建前缀数量信息的技巧-解决子数组相关问题36. (必备)二叉树高频题目上package class

2024-07-08 13:01:17 448 2

原创 算法-常见数据结构设计

该数据结构的实现就是通过我们的堆结构来实现的, 建立一个大根堆来装入小半部分的数据, 建立一个小根堆来建立大半部分的数据, 记住在装入数据的过程中我们要保持我们的堆中的元素的大小, 也就是通过一个balance方法, 来保持两边的数量差值不超过1, 获取中位数的时候我们, 如果两边数量不一致, 就返回多的哪一方的堆顶, 如果一致, 我们就返回两个堆顶的平均值, 代码实现如下。哈希表常见的三个操作时put、get和containsKey,而且这三个操作的时间复杂度为O(1)。

2024-07-07 21:43:33 1101 1

原创 Javase-异常

什么是异常①什么是异常?有什么用?1.Java中的异常是指程序运行时出现了错误或异常情况,导致程序无法继续正常执行的现象。例如,数组下标越界,空指针异常,类型转换异常等都属于异常情况,2、 Java提供了异常处理机制,即在程序中对可能出现的异常情况进行捕捉和处理。异常机制可以帮助程序员更好地管理程序的错误和异常情况,避免程序崩溃或出现不可预测的行为。3.没有异常机制的话,程序中就可能会出现一些难以调试和预测的异常行为,可能导致程序崩溃,甚至可能造成数据损失或损害用户利益。

2024-07-06 14:04:47 1017 2

原创 算法-位图与底层运算逻辑

位图可以存储 0 ~ n 范围内的数字, 上面线段表示每一个整数的范围, 一个整数有32个比特位, 所以一个整数可以存储32个整数的状态, 比如第一个整数存储数据的范围是[0,31],第二个是[32,63], 以此类推…首先阐释一下加法的运算的原理就是 加法的结果 = 无进位相加的结果( ^ ) + 进位信息( & 与

2024-07-02 15:09:42 1165 2

原创 算法-位运算基础

也就是 m ^ n == eor , 然后通过Brain Kernighan算法, 得到了最右侧的1, 因为我们的异或运算也可以等同于无进位相加, 所以这个1必定来源于m和n的其中一个, 所以我们定义一个eorN,让这个eorN只异或该位为1的数字, 得到的eorN就是m/n的其中一个,问题得解。比如 a == 5, b == 3, c == 2, returnA为获取一下c的符号是非负也就是1, 那么returnB就是相反的0, 所以最后return的结果就是returnA * a == a。

2024-06-29 23:07:30 1209 4

原创 算法数据结构必备篇章1

文章目录19. (必备)算法笔试处理输入输出20. (必备)递归与master公式21. (必备)归并排序22. (必备)归并分治23. (必备)随机快速排序24. (必备)随机选择算法25. (必备)堆结构与堆排序26. (必备)哈希表,有序表,比较器27. (必备)堆结构常见题28. (必备)基数排序29. (必备)重要排序算法的总结30. (必备)异或运算31. (必备)位运算32. (必备)位图33. (必备)位运算实现加减乘除34. (必备)链表高频题目和必备技巧35. 数据结构设计高频题36.

2024-06-16 15:13:47 403 1

原创 算法数据结构入门篇章

/ 按值传递、按引用传递// 从堆栈角度解释链表节点// 以堆栈视角来看链表反转// 还有String// 都是按值传递int a = 10;f(a);// 其他类型按引用传递// 比如下面的Number是自定义的类g1(b);g2(b);// 比如下面的一维数组g3(c);g4(c);a = 0;val = v;b = null;b.val = 6;c = null;c[0] = 100;// 单链表节点。

2024-06-16 14:40:28 268 2

原创 算法-堆结构和堆排序

堆的向上调整 : 该调整不用传入终止条件, 因为根节点的下标就是天然的终止条件, 从下面的条件里面我们可以发现, 根节点的父亲节点就是其本身。优先级队列其实就是顺序存储的二叉树结构, 我们的底层的源码里面是没有链式存储的二叉树的,二叉树的实现的细节是通过我们的数组来模拟实现的。堆的调整的时间复杂度分析 --> 堆的调整的时间复杂度是O(LogN), 依据的是二叉树的树的高度。堆的调整分为向上调整与向下调整, 请注意, 堆的每次调整都是基于其中。下图左边的是看的节点的规模, 右侧的是向下调整的层数。

2024-06-02 20:59:37 583 5

原创 算法-随机快排及荷兰国旗优化

随机快速排序和传统的快速排序的逻辑本质是一致的,都是找到一个值作为划分的中间位置,左边数值均小于该数值,右边数值均大于该数值,但是与传统的快排又不一致的是,我们的这个位置是通过随机获得的,对于随机行为的时间复杂度不能简单的按照最坏的情况解读随机快速排序算法随机快速排序的经典版本就是下面这样,随机出一个位置作为分界点,然后左右递归…我们下面的快排代码里面的 j 是作为左/右边界的越界位置存在 --> 随着下标指针的遍历(边界在不断地扩大)

2024-06-01 17:10:46 904 1

原创 算法-从归并排序到归并分治

归并排序是Merge sort)是一种有效、稳定的排序算法,它采用了分治法(Divide and Conquer)的典型应用,何为分治?即把多个事件分为两个或者多个子问题来解决(其实是一种递归寻找子问题的思路)归并分支的思想原理 : 在思考一个问题在大范围上的答案, 是否等于, 左部分的答案 + 右部分的答案 + 跨越左右的答案在计算跨越左右的答案的时候, 我们要思考如果加上左右都有序的这个条件, 会不会获得计算的便利性如果满足上述的两点, 那我们的这个题大概率是通过归并分治的思路去解决。

2024-05-29 16:37:50 899 7

原创 数据结构-堆刷题集

典型的topK问题,topK问题经常用于这种返回k个极值的问题,比如上面的推送问题,这里的topK我们计数的时候设计了一个类专门用来储存我们的数据,因为(Hash表我们还没学)我们在hash计数的时候,在遇到负数的情况的时候,我们就采用了两个hash来映射计数,一个映射正数,一个映射负数,代码实现如下。同样的,我们依然选择自己写一个类来模拟hash表的作用,代码实现如下。

2024-05-17 16:22:58 349 3

原创 数据结构-二叉树的遍历

广度优先搜索 : 递归完成 前序 中序 后序 的遍历。二叉树的遍历广义上是指下面我们说的七种遍历。深度优先搜索 : 层序遍历(借助队列)非递归的迭代法完成前中后遍历(借助栈)

2024-04-28 23:21:43 371

原创 算法-动态规划专题

动态规划在当前我们的理解下,其实就是一种变相的递归,我们查看一些资料也可以知道,动态规划其实属于递归的一个分支,通过把递归问题开辟的栈帧通过一定的手段放到某一种"表"中去动态规划标准解题流程1 . 创建dp表(一维/二维数组)2 . 确定我们的状态表示---->方法是 经验+题目要求+分解为相同的子问题---->目前已知的经验就是 以i位置为起点…/以i位置为末尾…3 . 推导状态转移方程(相邻位置优先)4 . 初始化(防止数组越界,处理边界位置)

2024-04-25 21:35:40 936 4

原创 数据结构-循环队列和循环双端队列的多角度实现

鉴于单链表的尾巴节点每次都要寻找,所以为了简便,我们采用双向链表进行模拟,注意,这里我们对于链表节点的定义就是我们LinkedList中的源码形式,有空可以去看看我们LinkedList的底层源码,这里其实就是多了个size来标记我们的链表节点数量。用数组实现队列源码层面是我们的ArrayDeque这个类完成的,这里不再多说了,和我们的1.用数组实现循环队列是一致的。其实循环队列的数组形式只有下面要注意的点,只要掌握了下面的这几点,代码层面上就没有什么问题了。下面是数组形式的实现代码。

2024-04-22 17:18:34 387 3

原创 数据结构-基于ArrayList的源码模拟

边缘方法都夹在总代码实现里面了,自己查看即可/*** 在我们ArrayList源码里面,提供了三种构造方法(简单模拟一下)*/throw new RuntimeException("不是哥们,大小不能是负数啊");//注意,通过System.arraycopy拷贝是不能直接改变空间大小的/*** 扩容机制解析* 这个方法getNewLength我们解释一下到底是咋回事,我们想要获得一个最适合的扩容机制。

2024-04-20 21:05:40 858 4

原创 数据结构-栈和队列刷题集(长期更新)

逆波兰表达式又叫做后缀表达式,因为计算机是好辨认出中缀表达式的计算顺序的,所以有时候要用后缀表达式进行求解。2.如果是操作符,弹出两个数字分别作为右操作数跟左操作数运算,结果入栈。3.最后弹出栈内的最后一个元素。1.如果是数字,直接入栈。

2024-04-17 15:46:59 520 5

原创 数据结构-链表刷题集(长期更新)

有了上面的铺垫,我们的两数相加其实就是这个原理,由于我们不知道具体链表的长度(可以整一个size方法,但是没必要),我们直接用顺序表来代替数组来进行操作,依然是模拟竖式相加,最后逐个new新节点进行串联即可(创建一个虚拟的节点进行连接)要做这个题,首先我们要学会模拟竖式的加法,我们知道即使是java基本数据中最大的long类型范围也是有限的,那如果超出范围了我们该怎么办呢,我们就需要用字符串来模拟这个加法的过程。2.把字符数组逆序操作变为数字数组(逆序的原因是模拟竖式对齐)题目及其相关实例如下。

2024-04-13 23:15:08 422 2

原创 Javase-类与对象

传统的洗衣服的过程,注重的是洗衣服的各种步骤,也就是注重的过程,中间少一个环节都可能完成不了工作,假设我们把这种映射到计算机,也就是每次处理一个问题都要有不同的方案,代码的可维护性大幅度下降。其实面向对象和面向过程的区别就是,面向对象解决问题的方式是通过多个对象之间的相互协作来对一个系统性的信息进行处理,这样就会更加的高效,代码的可维护性及其可复用性将会大幅度上升。这其实是非常合理的,首先this是当前的对象的引用,而构造方法是为了构造当前的对象而产生的,你都没对象,怎么会传递的this啊…

2024-03-04 22:09:37 991 1

原创 算法-二分搜索(长期更新)

这个其实也是二分的逻辑,我们定义一个标记物 ans 初始化置为-1,当我们的mid满足条件的时候,我们就将我们的ans置为 mid ,然后继续二分,当不满足条件的时候,我们就不进行操作,继续二分,然后最后返回我们的 ans 标记物…,我们来看体重的假设提示,我们假设 nums[-1] 和 nums[n] 都是 负无穷。这个其实跟情景二是对称的,原理是一致的,当满足条件的时候记录下来继续进行二分,当不满足条件的时候不进行记录然后继续进行二分,到二分到不能再次进行二分的情况之后,就返回我们的标记ans值…

2024-03-02 13:21:00 1805 3

原创 Javase补充-Arrays类的常用方法汇总

我们可以看到这个方法里面有三个参数,一个是arr(待排序的数组),一个是fromIndex,一个是toIndex,也就是从什么时候开始,和从什么时候结束,值得一提的是,我们java中这种定区间的方法一般是左闭右开,所以如果fromIndex==toIndex,也就是不进行数组的排序,…刚才我们在进行用插入排序来模拟sort方法的指定访问的时候,进行了范围的检查,实际上我们的Arrays类已经提供了一个进行范围检查的方法,如果你进行一些指定范围的原码的查看,你会发现都在调用这个方法。

2024-02-24 23:52:39 1348 1

原创 Javase-数组

数组的创建数组元素类型[] 数组名 = new 数组元素类型[元素个数]例如:创建一个整型数组里面有5个整型元素创建一个字符串数组,里面存放4个字符串数组的初始化数组的初始化分成动态初始化和静态初始化1.动态初始化在定义数组的同时直接指定数组元素的大小例如:2.静态初始化,在定义数组的同时不直接指定数组的大小,而是根据后面的内容确定例如......静态初始化数组的注意事项静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。

2024-02-23 19:24:42 1053

原创 Javase-方法的使用

基本格式如下[修饰符列表] [返回值类型] 方法名 [形式参数列表]{方法体[return返回值]举一个例子,构造一个加法方法,请注意,我们现阶段所写的方法的修饰符列表全部都用public static进行修饰,具体的原理我们在后续类与对象再进行解释,先记下来吧…注意事项修饰符:现阶段直接使用public static 固定搭配返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void方法名字:采用小驼峰命名。

2024-02-22 17:04:50 964 1

原创 Javase-变量与数据类型

Java当中数据类型分为2种,一种是基本数据类型,一种是引用数据类型,其中基本数据类型也可以分为整形,浮点型,字符型,以及布尔类型,引用数据类型分为类,接口,数组,今天我们先主要讨论我们的基本数据类型下面这张图很好的说明了数据类型的关系下面这张图可以很好的说明数据类型的大小以及范围Java 的整数类型就是用于存放整数值的,比如 12 , 30, 3456 等等下面是一个案例演示://一个字节//两个字节//四个字节//八个字节。

2024-02-20 18:42:52 960 1

原创 Javase-初识Java

因为我们的在文本中写的时候默认是utf-8编码,但是javac是用的GBK进行解码,所以有时候程序无法正常运行,所以我们有两种解决方案,第一种是直接在文件编码的时候直接改成GBK编码,另一种是在javac解码的时候用utf-8解码.Java的面向对象特性与C++旗鼓相当,与C++的主要不同点在于多重继承。Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性(对于曾经花费几个小。其中我们的变量名就是JAVA_HOME,我们的变量值就是你JDK(下文解释)所在的路径。

2024-02-01 17:53:17 1115 1

空空如也

空空如也

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

TA关注的人

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