- 博客(27)
- 收藏
- 关注
原创 JAVA入门——反射
/返回所有公共构造方法对象的数组。//返回所有构造方法对象的数组。//返回所有公共成员变量对象的数组。//返回所有成员变量对象的数组。//返回所有成员方法对象,//返回单个公共成员变量对象。
2025-03-05 23:30:14
506
原创 JAVA入门——多线程
ThreadPoolExecutor对象重点考虑七个参数1.核心线程数量(不能小于0)2.线程池中最大线程数量3.空闲时间(值)4.空闲时间(单位)要用TimeUnit指定5.阻塞队列(不能为null)6.创建线程的方式(不能为null)7.执行的任务过多时的解决方案(不能为null)在ThreadPoolExecutor的静态内部类AbortPolicy中。
2025-03-04 20:35:04
563
原创 JAVA入门——不可变集合、Stream流、方法引用、异常
List<String> list = List.of("张三","李四");//注意是静态方法,直接用接口名调用即可ofEntries方法注意:JDK10开始才有。
2025-02-18 21:53:10
535
原创 MySQL学习——环境搭建与SQL基础语句
DCL:数据控制语言,用来创建数据库用户、控制数据库的访问权限。DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)字符串和日期型数据应该包含在引号中(字符串,但是单引号即可)数据操作语言,用于对数据库表中的数据记录进行增删查改。DML:数据操作语言,用来对表中数据增删查改。主机名可以使用通配符%,代表任意主机都能用。DQL:数据查询语言,用来查询表的记录。管理数据库用户,控制数据库的访问权限。在命令行中使用时,别忘了加分号。DQL语句的执行顺序(※)单行注释:-- 或 #多行注释:/* */
2025-02-06 21:45:08
1466
原创 JAVA入门——Lambda表达式和List系列集合
只能简化函数式接口的匿名内部类写法函数式接口:有且仅有一个抽象方法的接口,接口上方可以加@FunctionalInterface注解()->{
2025-02-04 23:05:39
684
原创 平衡树基础2——AVL树
/结构定义int key, h;//多了一个h存储树高}Node;//几个方便的宏//创建一个虚拟空节点Node __NIL;//这个作用是规定下面函数的性质,可以让他先于主函数执行//但是我这个编译器不支持,还是要放到主函数中调用。NIL->h = 0;return;1.要学习左旋、右旋这两个二叉树平衡调整的重要操作。2.可以借鉴虚拟空节点这个编程技巧3.测试时的输出更能体现编程能力,学习type_str这个技巧4.要记住AVL树的平衡和失衡条件。
2025-01-20 23:00:30
525
原创 算法设计与分析实验期末复习(4)—— 实验四
动态规划这部分内容其实考察的是数学能力,只要能想出来转移方程,其他的都好说。我个人感觉这部分还是有点难的,不过考试不限制方法,实在不行可以暴力搜索。
2025-01-05 00:20:46
405
原创 算法设计与分析实验期末复习(3)—— 实验三
这道题考察的是简单的广度优先搜索,这种题重点就是判断每个节点有几个可能状态,比如这个迷宫问题,很简单,节点只有来过和没来过这种情况,所以只需要坐标的二维数组就行,有的题比如涂色,就可能需要三维了,因为每个节点还有颜色这一维。这题思路:还是经典的迷宫三件套:方向数组,判重数组,循环判断,只是这里深搜改成广搜了而已。我这里结构体中的alive其实没用到,大家可以删了,有的题可能会有用,写习惯懒得改了。需要注意的点就是这题题目要求数组下标从1开始用。
2024-12-31 23:11:06
369
原创 算法设计与分析实验期末复习(2)—— 实验二
这里用回溯法解决,这道题的框架加上排列树那个框架,其实能解决大部分回溯法的题了。这道题不需要记录解向量,其实标准的框架应该是use[m] = 1;dfs下一层use[m] = 0;dfs下一层先标记用这个节点,然后再标记不用这个节点,两种情况都分别进行深搜要注意的点:1.递归函数一定别忘了结束条件!!!一开始忘了return了,所以栈一直溢出,而头歌平台还不会抛出栈溢出的异常,所以会表现为没有输出。很难找这个BUG,考试时候只能用头歌平台,一定注意细节避免BUG。
2024-12-23 23:33:27
198
原创 算法设计与分析实验期末复习(1)—— 实验一
一、二分查找一、二分查找二分查找是递归入门最基础的部分了,需要注意的细节有:1.给的数据是不是有序的,升序还是降序?2.区间开闭的选取,我这里实现是采用的是左闭右开的模式。3.一定注意,递归结束的条件一定不能忘,if(l>=r)这部分我忘记过,然后debug找了半天(
2024-12-22 18:43:25
277
原创 平衡树基础1——二叉排序树(二叉搜索树)
1.性质:左子树 < 根节点的值,右子树 > 根节点的值。2.用途:解决与排名相关的检索问题3.进行中序遍历时,能升序输出结果。二、结构操作1.插入:待插入值和根节点比较,如果小于就向左子树去找,反之向右子树。然后在子树中重复这个过程,直到满足左子树 < 根 < 右子树 这个要求。2.删除:1.出度为0的节点(叶子结点):直接删除即可2.出度为1的节点(只有一个子孩子):把他的孩子放到他的位置。
2024-12-10 15:54:21
265
原创 Leetcode——198打家劫舍
1.做题时遇到的问题就是最大值出现位置,开始只考虑了an,求不出正确解,后来发现an-1和an是独立的,所以需要比较他俩。难点:注意最大值的位置,因为不相邻的原因,所以an 和 an-1都有可能是最大值出现位置,所以需要在两者中取max。就是对于an,我们遍历a1 - an-2的所有值,注意排除相邻的an-1,然后找最大值加上an就可以了。an-2 + val(n)),状态转移方程很容易就写出来了。一道很简单的动态规划问题,an = max(an,
2024-12-09 23:07:49
211
原创 Leetcode——740删除并获得点数
我最初初始化sum数组时,用的静态数组,而且还用了sort,count等函数,这其实都可以省略。转移方程其实很简单:和198打家劫舍一样,对于第i个数,求max(sum[i],sum[i] + sum[j])即可,即an = max(an,aj + an) j <= n-2,就能实现删除-1和+1的数。其实最大值an只与两个值有关,就是an-1和an-2,an-2一定是前n-2个数能获得的最大值,而an-1是由于不连续取点而造成的间断值,所以an = max(an-1,an-2 + sum[n])
2024-12-09 23:05:41
147
原创 算法学习——哈希表与布隆过滤器
布隆过滤器思想:引入概率算法,一般会设计很多个哈希函数,然后对于每个新值,我们要传入所有哈希函数中来计算出多个值x1,x2,x3...,我们去判读这些值对应的位置是否有元素,有元素的位置越多,该元素出现过的概率越大。4.本章采用的冲突处理是拉链法,使用时我将整个哈希表当做一个“架子”,我没有用哈希表上的节点,每个新的数据都插入到了哈希表上节点的next,这其实是把哈希表当做虚拟头结点了。这种情况下,网址的数量其实数以亿计,如果我们用哈希表,未免太大了,所以用布隆过滤器更好。冲突处理方式选择拉链法。
2024-11-30 18:28:50
446
原创 Leetcode34——在排序数组中查找元素的第一个和最后一个位置
对整个数组进行二分查找,找到目标元素后,我们设置两个指针 i,j,向左右循环遍历,找到所有相同元素的起点和终点坐标,记录下标即可。保证向左右查找的循环操作只执行一次,所以设置了全局开关变量flag,其实用宏更好一点,用完之后直接#undef,能减少史山代码。失误二:对区间划分不清楚,我这里采用[a,b)左开右闭的区间,所以在二分递归时参数要注意传谁。这道题就是在二分的基础上多了一个小改动,需要多一重循环找位置而已。失误一:少了递归终止条件,s == e。失误三:访问 nums 向量不要越界。
2024-11-28 21:32:58
170
原创 openCV学习1——基础速成
因为上课要用,鼠鼠甚至python 0基础,所以这篇文章不会对一些Python语法做过多解释每一个板块我基本传的完整代码,不懂是什么效果的话,直接去IDE里运行一下目标:改参数能用就行(
2024-11-27 21:12:45
324
原创 Leetcode113——路径总和II
回溯法,这个题就很符合回溯法的思路,我们基于深度优先搜索,从左向右遍历,每次都把元素放入vector<int>向量中,然后接着向左、右子树分别搜索,最后遇到n == targetSum时,我们直接放进提供的vector<vector<int>>中去。2.做这种找和为定值的题,不一定非要从0开始做加法,也可以从目标值开始,对每个节点做减法,以==0为判断条件。我这个代码写的十分笨重,这是因为我不会vector这个类中的删除队尾元素的操作(重点是:在左右子树搜索完后,一定要回溯到上一状态,即尾元素删除!
2024-11-26 23:30:39
217
原创 Leetcode112——路径总和
1.对叶子节点的判定,最开始我用的如下语句判断叶子节点,很明显对那些只有单边子树的节点是错误的。这题非常简单,用回溯法去做就可以,但是在做的时候犯了一些错误,觉得有些价值就记录了下来。2.函数judge传值的过程中,会出现访问空指针成员的问题,所以加了if else判断。
2024-11-26 18:31:53
152
原创 算法学习——跳跃表(Skiplist)
尤其要注意销毁顺序,我们把跳跃表想象成一个晾衣杆,中间的是一个个长度不定的一维数组,这样销毁的时候一定要注意找到数组的首地址。过程:和查找一样,从左上开始向右下找,这个过程会走出一条折线,这条折线每一行的最右侧节点就是插入位置前一个节点。例:假设插入元素10,这样第0行就是6这个节点,第1行也是6这个节点,第2行是1这个节点,以此类推。这个过程其实就是从左上往右下的走楼梯过程,需要注意比较的是当前节点下一个节点的值 与 待查找的值。是一个加强版链表,对链表的每个元素都设置一个层高,将链表竖向拉长的结果。
2024-11-26 00:00:16
346
原创 算法学习笔记——学习set,并去模拟堆
每个元素a插入时,都插入 -a,这样最大的元素取负后反而是最小的了,就会在堆顶,这样我们访问时再取负,拿出来的就是最大值了。比如 pair 我们多存储一个元素,来代表插入值的顺序,这样自然不会重复了。3.如果有重复元素,还想用set,怎么办?2.set是一个集合,集合中元素具有唯一性(相同元素只保留一个)(其实c++里面有优先队列stl模版类,这里只是在学习set)这两个操作,加上insert()插入就完全够实现小顶堆。※遍历时,元素输出的顺序是什么?很多种方法,重载啊什么都可以。
2024-11-25 14:23:51
140
原创 LeetCode-99恢复二叉搜索树
思路就是找出序列中不满足升序排列的位置,我们记这两个位置为a,b,我初次遇到的问题就是忽略了a,b相邻的情况,因为我们在遍历查找时,按 an > an+1 去找,对于以a,x1,x2,x3,b为例的数据,我们肯定锁定的节点是a 和 x3,这样我们记录时一个是 an ,一个一定是 an+1,而对于相邻的情况,我们只能找到一处位置满足an > an+1。2,学习编码技巧,就是记录两个值的时候,可以都赋值为空,然后加一次判断,这样就可以把相邻和不相邻情况合并。正式解题:(显式遍历,有nums数组的)
2024-11-23 17:32:59
215
原创 LeetCode98-验证二叉搜索树
对于左半子树,每次左侧子节点重新设置upper,那个新的upper都会小于之前的upper,而向右设置lower,这个lower肯定也是已经判断过比根节点的值小的,所以就能往下,右半子树同理。而对于子节点,我们递归执行这个过程,就可以每次重新设置upper和lower,而利用递归的记忆性能在返回节点时重新用那个节点的upper和lower。其实就是在找一个区间,(a,b),向左树搜索,就是插入一个常数c,区间变成(a,c),向右搜索就是区间变成(c,b),要保证子树的所有值都在区间内。
2024-11-22 17:20:18
252
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人