自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 KMP算法(内有动图+推导 小白也能无痛上手)

构建前缀表的过程。前缀表的构建是层层优化的,看完肯定对于kmp的理解更深一步。

2024-03-14 21:05:25 2870 1

原创 挑战春招找到java后端实习第三天(1.4)

从数据结构分可以分为B+树索引(适用于范围查找如between和精确查找如=),哈希索引(适用于=,不适用于< >),倒排索引(全文的查找,如TEXT类型的列),R-树索引(储存空间数据)从InnoDB B+树索引可以分为聚簇索引(索引节点完整存储数据记录如主键索引)和非聚簇索引(索引的叶子节点存储了主键值和对应的索引字段,如非主键索引)从索引性质可以分为普通索引,主键索引,联合索引,唯一索引,全文索引,空间索引。

2025-01-04 23:21:55 420

原创 挑战春招找到java后端实习第二天(1.2)

使用联合索引时,从最左侧开始匹配。若包含多列则必须包含第一列,有两列则必须包含第二列,依此类推。他的是:联合索引在B+树中按从左到右的顺序进行匹配。在上述情况的时候也可以使用复合查询,因为a=1,b=2,c=3已经遵循了最左前缀匹配原则,a大于1,b大于2的结果依次向后推就行了,已经确定好了第一条的数据。但是没有等于号的话就不会进行最左前缀匹配。若发现某一条语句的执行时间较长,那么我们可以采用explain语句去看MySQL的查询计划,确认是否使用正确的索引。

2025-01-02 23:39:15 423 1

原创 挑战春招找到java后端实习第一天(1.1)

集合类分为两大类Collection和Map。前者是对象的集合,后者是键值对。Collection分为List,Set,Queue三个接口。List有LinkedList,ArrayList,VectorSet(不允许重复)有HashSet,TreeSet(元素有序),LinkedHashSet(维护插入顺序)Queue有LinkedList,PriorityQueue。

2025-01-01 22:16:53 678 2

原创 25王道数据结构2.37综合应用 06,08,12,13,14,15,16

全是自己写的,可能有不对的,欢迎大家斧正。

2024-08-01 17:36:51 200

原创 Day48代码随想录 动态规划

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果,房屋将自动报警。给定二叉树的root。返回,小偷能够盗取的最高金额。7小偷一晚能够盗取的最高金额 3 + 3 + 1 = 79小偷一晚能够盗取的最高金额 4 + 5 = 9[1, 104]状态:看题解思路完成了,自己想没想到返回值是二维。

2024-04-25 17:29:22 956

原创 动态规划(爬楼梯)-灵神题单

好字符串为 "00" ,"11" ,"000" ,"110" 和 "011"。可以这样构造得到:"" -> "0" -> "01" -> "011"。从 "000" 到 "111" 之间所有的二进制字符串都是好字符串。之间(包含上下边界)的字符串,那么这个字符串我们称为。由于答案可能很大,请将结果对。一个可能的好字符串是 "011"。如果通过以上过程得到一个。以上操作可以执行任意次。请你返回满足以上要求的。

2024-04-22 19:18:10 583

原创 Day46代码随想录(1刷) 多重背包+动态规划

思路:这题有环路所以判断就会变得麻烦所以我们可以拆成两个非环路进行比大小,对nums[0]进行讨论是否取,如果取则只能从[2,n-1)中讨论偷不偷,如果不取从[1,n)中讨论,所以最后只要比较两个环路的大小就ok了。偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。

2024-04-20 13:04:27 1252

原创 Day43 代码随想录(1刷) 完全背包

给你一个由整数组成的数组nums,和一个目标整数target。请你从nums中找出并返回总和为target的元素组合的个数。题目数据保证答案符合 32 位整数范围。7所有可能的组合为:(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。0状态:不知道怎么求排列数,求了组合数思路:求组合数就是先遍历物品再遍历背包,求排列数就是先遍历背包再遍历物品。

2024-04-19 16:41:49 1448

原创 Day42代码随想录(1刷) 动态规划

给你一个二进制字符串数组strs和两个整数m和n。请你找出并返回strs的最大子集的长度,该子集中有m个0和n个1。如果x的所有元素也是y的元素,集合x是集合y的。4最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"}。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3。2。

2024-04-18 16:59:22 836

原创 Day41代码随想录(1刷) 动态规划

1049. 最后一块石头的重量 II有一堆石头,用整数数组stones 表示。其中stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回

2024-04-15 17:30:37 954

原创 Day39 代码随想录(1刷) 动态规划 0-1背包

思路:这是一个存粹的0-1背包的入门问题,先用二维的dp数组解决,dp[i][j]表示背包最大容量为j的时候从物品【0-i】任取,所以最后一个格就是背包容量是N时的最大价值,状态转移方程也是很好理解的dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-weights[i]]+values[i]),意思就是对比不取物品i时在这个容量时的最大价值和取这个物品在背包容量允许的情况下的价值。第一行包含两个正整数,第一个整数 M 代表研究材料的种类,第二个正整数 N,代表小明的行李空间。

2024-04-13 17:02:41 890

原创 Day38 代码随想录(1刷)动态规划

给定一个正整数n,将其拆分为k个的和(k >= 2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。n = 21n = 1036状态:完成思路:这题一开始我就知道这个数学方法就是能分成多少个3就是最大的,如果剩4则最后一个乘4是最大的。动态规划方法,dp数组表示在i时拆开的最大值dp[i],所以dp[i]=Math.max(Math.max(dp[i-j]*(j),j*(i-j)),dp[i]);然后最后返回最后一个即可。

2024-04-12 19:51:48 556

原创 Day37代码随想录(1刷) 动态规划

(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n,请计算F(n)。n = 21n = 32n = 43状态:完成思路:由题目意思可得,状态转移方程是dp[i]=dp[i-1]+dp[i-2]。

2024-04-11 12:55:23 1212

原创 Day36代码随想录(1刷) 贪心

思路:贪心思路就是如果前面的数比后面的数字大则把前面的数字减1然后把后面的数字变成9,这样子就可以了,但还有一个问题需要去注意的,就是遍历的顺序问题,如果采用从前到后则会导致值变小导致不符合要求,所以这题采用从后向前,但是从后向前还有一个需要注意的就是什么时候置9,要等所有结束遍历之后再置9,如果在循环中置9会导致有些值赋不上9,比如n=1000时就不行了,要等循环结束之后然后把flag以及后面都置为9。感想:今天完成贪心的所有内容,明天开始动态规划,keep going on。的最大数字,且数字呈。

2024-04-10 15:26:11 484

原创 Day35代码随想录(1刷)贪心

给定一个区间的集合intervals,其中。返回需要移除区间的最小数量,使剩余区间互不重叠。1移除 [1,3] 后,剩下的区间没有重叠。2你需要移除两个 [1,2] 来使剩下的区间没有重叠。0你不需要移除任何区间,因为它们已经是无重叠的了。状态:没做出来,没想明白最少次数是什么意思思路:只要有重叠的肯定要有元素是被移除的,所以这题的解法就是求出所有的重叠区间出来就可以完成题目。

2024-04-09 19:56:42 1170

原创 Day34代码随想录(1刷) 贪心

这题把身高从小到大排,因为先排身高大的人所以无论他放在哪里都是符合的,又因为后面的数字排列时,前面的数字一定比他的大,所以后面的数字在排列时也是符合的。感想:今天时间比较挤,写的时间少了很多,主要是服务器的迁移,差点搞成大错,mysql5.7跟8.0的数据存储方式不一样,不能直接复制数据库的文件,幸好有回收站,linux就寄了幸好windows。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。

2024-04-08 20:48:52 1337

原创 Day32代码随想录(1刷) 贪心

给你一个整数数组nums和一个整数kinums[i]-nums[i]重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数组。5选择下标 1 ,nums 变为 [4,-2,3]。6选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2]。13选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4]。状态:完成思路:我这个有点偷鸡摸狗了,如果数据量多一点肯定超时了。

2024-04-06 13:01:19 1237

原创 Day31代码随想录(1刷) 贪心

给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。

2024-04-05 15:51:06 889

原创 Day30 代码随想录(1刷) 贪心

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果,我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。1你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。所以你应该输出1。2。

2024-04-04 21:29:34 1161

原创 Day29代码随想录(1刷) 回溯

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的的解决方案。每一种解法包含一个不同的的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。n = 4如上图所示,4 皇后问题存在两个不同的解法。n = 1[["Q"]]状态:完成。

2024-04-03 17:00:09 1032

原创 Day28 代码随想录(1刷) 回溯

换个方向思考先把死结点入栈然后再从死结点出发再回去起始节点就可以了。

2024-04-02 21:22:23 1562

原创 Day27 代码随想录(1刷) 回溯

给你一个字符串s,请你将s分割成一些子串,使每个子串都是ss = "aab"s = "a"[["a"]]状态:完成思路:目的是分割使每个子串都是回文串,所以用回溯来解决问题。用result来记录合理的分割方式,用path来装分割的子串,回溯中我们只要从startIndex开始就行了,每一次递归都判断该字串是否是回文串,是就继续不是就继续循环。正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。给定一个只包含数字的字符串s。

2024-04-01 12:30:57 1084

原创 Day25 代码随想录(1刷) 回溯

给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。[2,3,6,7],target =72 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。仅有这两种组合。

2024-03-30 22:21:35 547

原创 Day24 代码随想录(1刷) 回溯

给定两个整数n和k,返回范围[1, n]中所有可能的k个数的组合。你可以按返回答案。[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],[[1]]状态:完成。

2024-03-29 12:38:25 1007

原创 Day23 代码随想录(1刷) 二叉树

感想:今天是二叉树的最后一天,感觉经过这段时间的二叉树的学习感觉学到了很多,二叉树的各种遍历方式,二叉树的各种属性(对称、最大深度、最小深度、平衡......),二叉树的修改以及构造,二叉搜索树的属性,二叉搜索树的属性,二叉搜索树公共祖先,二叉搜索树的修改和构造。思路:他要把二叉搜索树转换成累加树,二叉搜索树是右大左小的所以采用反中序的遍历方式(右中左)然后累加和,完成题目。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。给你二叉搜索树的根节点。

2024-03-28 12:08:30 1040

原创 Java基本数据结构(基于jdk11)

java中有很多数据类型,以下数据类型都出于java.util包下且日常经常使用的,先介绍一下接口,接口可以很快的了解到这个数据结构的特性。

2024-03-27 23:46:13 1044 2

原创 Day22代码随想录(1刷) 二叉树

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]6节点2和节点8的最近公共祖先是6。2节点2和节点4的最近公共祖先是2, 因为根据定义最近公共祖先节点可以为节点本身。状态:完成,一开始没想到可以这么好的利用二叉搜索树的特性。

2024-03-27 16:11:20 871

原创 Day21代码随想录(1刷) 二叉树

第二种是中序遍历,中序遍历二叉搜索树是递增的,所以中序遍历时,记录上一节点的数值,如果该节点的值就是上一节点的值now++,如果不是就说明这个数字就到尽头了,然后分两种情况,第一种这个数字的个数跟最大的个数一样则收录进list中,如果这个数字个数比最大个数大则清空list并把最大个数变为该数字的个数。要分三种情况在后序遍历时,左节点、右节点都为空则返回空,左节点或右节点有就返回左节点或右节点,都存在则该节点就是最深的祖先节点因为是后序遍历所以肯定是最深的了。给你一个含重复值的二叉搜索树(BST)的根节点。

2024-03-26 12:58:21 780

原创 新手勇闯leetcode 390周赛

思路:用一个哈希表去存储每个数字的出现次数,用优先队列去实现得到出现次数最多的数字,再使用懒删除,就是只有堆顶的元素的值发生改变的时候才去弹栈的操作,减少了时间复杂度,我一开始实现的还要去查找每一次改变的字母再去删除,于是超时了。思路:这一题我通过找规律得到一个规律移动一次最大值增加的值(1,2,2,3,3,4,4......)这样子的规律增加下去的,所以可以得出下面的算法。第 1 步操作后,有 3 个 ID 为 2 的元素和 2 个 ID 为 3 的元素,所以。,如果在某次操作后集合为空,那么。

2024-03-25 17:16:01 1001

原创 389周赛总结

难度:731给你一个字符串s,请你判断字符串s是否存在一个长度为2的子字符串,在其反转后的字符串中也出现。如果存在这样的子字符串,返回true;如果不存在,返回false。true子字符串"ee"的长度为2,它也出现在中。true所有长度为2的子字符串"ab""bc""cb""ba"也都出现在中。s = "abcd"false字符串s中不存在满足「在其反转后的字符串中也出现」且长度为2的子字符串。s状态:完成,但是方法不好,看了灵山的代码确实可以。

2024-03-25 15:14:43 702

原创 Day20 代码随想录(1刷) 二叉树

该题使用前序遍历可以满足要求,先找出数组中此时的最大值该值则为根节点的值,然后在递归左右节点,分割数组,最后链接根节点的左右节点完成题目的要求。思路:前序遍历两棵树,分情况进行讨论,当两个节点都是空则返回,如果其中有一个节点不是空则返回该节点,如果两个节点都不是空的则把两个节点之和创建的新数组返回。- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。

2024-03-25 14:54:40 1083

原创 Day18 代码随想录(1刷) 二叉树

给定一个二叉树的root,请找出该二叉树的节点的值。假设二叉树中至少有一个节点。17状态:完成,使用层序遍历思路:层序遍历最后一层的第一个元素。

2024-03-24 17:39:28 974 1

原创 Day17代码随想录(1刷) 二叉树

思路:使用前序遍历,遍历传入参数两个一个是当前节点,一个是是否是左节点,用来区分左右叶子节点,当是叶子节点是sum加上当前节点的值。思路:前序遍历找各个节点的左右节点的深度,如果其中一个左右节点的差大过1则返回-1,则此树不是平衡二叉树。思路:这题用前序遍历,当左右节点都为空时到了叶子节点添加进list中。在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。是指该树所有节点的左右子树的深度相差不超过 1。,返回所有从根节点到叶子节点的路径。给你一个二叉树的根节点。是指没有子节点的节点。

2024-03-22 12:40:44 621 1

原创 Day16代码随想录(1刷) 二叉树

状态:完成思路:使用前序遍历的方式求得二叉树的最大深度,每次递归比较左右节点哪个更加大再加上当前节点(+1),最后得到二叉树最大深度。用层序遍历昨天已经实现过了。

2024-03-21 17:10:37 317 1

原创 Day15 二叉树

感想:二叉树之前没怎么做过,给我感觉挺灵活的,有时候没想到可以这样子做,而且很多数据结构也用到了二叉树,比如堆,周末我想总结一下java各个常用的数据结构的方法的时间复杂度。思路:层序遍历就是从层的两侧向中间去遍历,如果两侧的值不一样或者有空的值就肯定不是对称的。思路:我这样写也可以做出来,最方便的办法肯定就是正向的层序遍历之后把答案翻转,还有一种不用翻转用LinkedList这个链表添加到头就行了。思路:其实这题就是层序遍历的最后一个值的集合,所以只要把每一层的最后一个节点写进结果数组中就可以。

2024-03-20 17:23:07 568 1

原创 Day14 代码随想录(1刷) 42接雨水+二叉树遍历

给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。6上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。9状态:不会,看灵山的视频理解了。

2024-03-19 20:12:59 289

原创 Day13 代码随想录(1刷) 栈,堆

给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。滑动窗口的位置 最大值[1]状态:暴力做出来但是超时了,然后看了carl的解析,学习了单调队列,自己尝试做出来了。思路:要知道滑动窗口中的最大值,我们如果暴力的话就是当最大值移动出去就遍历窗口寻找第二大的值,但是这样的时间复杂度就是O(n*k)。

2024-03-18 12:50:38 910 1

原创 新手leetcode 126双周赛被拷打篇

思路:一开始我是对nums数组排序了,然后标记的时候在nums数组中查找相同的值导致超时了。我们可以不对值进行排序我们创建一个数组对下标进行排序,nums中值越小的下标越在前面,这样就省去对nums数组进行查找值的操作了,降低了时间复杂度。上面的函数可以对 id数组根据在nums里的值从小到大的进行排序,这样是升序将顺序调转就是降序。要注意sort时这个数组的类型不能是基本类型如int的,要是Integer这种封装类型。个未标记的最小元素。处的元素标记,并且标记最靠前的。一开始,数组中的所有元素都。

2024-03-17 22:35:22 1057 1

原创 Day11代码随想录(1刷) 栈

给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。s = "()"truetrues = "(]"false'()[]{}'状态:完成思路: 括号匹配问题的关键就是出现后括号的时候前面一定是相应的前括号,不然就匹配失败。用栈就可以解决了,就是位于栈顶的括号是该后括号的前括号就行,其他的就不行。前括号就直接进栈,后括号做判断。给出由小写字母组成的字符串S会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。

2024-03-16 19:08:46 957 1

操作系统大实验,实现基本操作系统操作,java

springboot+vue+jwt单点登录实现的多目录多用户文件管理操作系统。该操作系统实现了作业调度采用优先级优先的作业调度,进程调度采用先来先服务的方式。内存管理使用虚拟页式存储管理的方式,资源分配缺页时采用lru的置换方式进行置换,文件分配使用银行家算法进行预防死锁,文件系统采用多级目录存储方式进行存储,内外存的空闲块都是采用位视图的方式进行管理。springboot+vue+jwt单点登录实现的多目录多用户文件管理操作系统。该操作系统实现了作业调度采用优先级优先的作业调度,进程调度采用先来先服务的方式。内存管理使用虚拟页式存储管理的方式,资源分配缺页时采用lru的置换方式进行置换,文件分配使用银行家算法进行预防死锁,文件系统采用多级目录存储方式进行存储,内外存的空闲块都是采用位视图的方式进行管理。 2.实验环境 操作系统 windows11 编程语言及工具 java 11+idea2020.1 配置文件 domin/Config.java

2024-03-13

使用python实现课表的爬取

爬取五邑大学的课表

2024-03-13

空空如也

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

TA关注的人

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