自定义博客皮肤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)
  • 收藏
  • 关注

原创 本地部署到服务器上的资源路径问题

当使用Thymeleaf时,在templates的目录下为返回的html页面,下面以两个例子解释当将代码部署到tomcat时访问资源的路径配置问题。

2024-07-06 19:25:58 948

原创 训练营第三十八天动态规划(01背包part1)

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。

2024-05-01 19:45:14 35

原创 训练营第三十七天动态规划(基础题part3)

确定dp dp[i]表示 1到i为节点组成的二叉搜索树的个数为dp[i]对于dp[3],分别以j = 1 2 3为头结点进行加和。返回满足题意的二叉搜索树的种数。初始化:dp[0] = 1(因为是乘法)),并使这些整数的乘积最大化。个节点组成且节点值从。你可以获得的最大乘积。

2024-04-29 17:15:48 278

原创 训练营第三十六天动态规划(基础题part2)

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。网格的左上角 (起始点在下图中标记为 “Start” )。网格中的障碍物和空位置分别用。

2024-04-28 21:31:32 389

原创 训练营第三十五天动态规划(基础题part1)

需要用到之前的数据。

2024-04-26 12:10:01 827

原创 训练营第三十四天贪心(完结)

例:100 -》 如果相等,那么就会变成090即90而不是99,所以只要发生了调换,就应该从调换位置开始将后面所有的都变成9。如果是以下情况,其实就是 左右孩子节点有一个有摄像头了,那么其父节点就应该是2(覆盖的状态)从低到上,先给叶子节点父节点放个摄像头,然后隔两个节点放一个摄像头,直至到二叉树头结点。左孩子有覆盖,右孩子有覆盖,那么此时中间节点应该就是无覆盖的状态了。从右向左遍历,如果前一个比后一个大,就把前一个-1,后一个变成9。这个不难理解,毕竟有一个孩子没有覆盖,父节点就应该放摄像头。

2024-04-25 11:39:58 739

原创 训练营第三十三天贪心(第五部分重叠区间问题)

遇到重叠区间的问题即二维数组的重叠区域等问题一定要先固定一头,然后在考虑另一头。

2024-04-24 11:40:57 374

原创 springboot+mybatis+hive启动失败

失败原因见最后几行,说明[jetty-runner-9.3.20.v20170531.jar:2.3.2]版本冲突,删除即可。

2024-04-23 17:51:55 574

原创 训练营第三十二天贪心(第四部分)

有一些球形气球贴在一堵用 XY 平面表示的墙面上。自己写的,局部最优就是从10开始减,不行再找5,因为5可以给10块找零。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付。处射出一支箭,若有一个气球的直径的开始和结束坐标为。表示队列中一些人的属性(不一定按顺序)。假设有打乱顺序的一群人站成一个队列,数组。你不知道气球的确切 y 坐标。顾客排队购买你的产品,(按账单。在柠檬水摊上,每一杯柠檬水的售价为。注意,一开始你手头没有任何零钱。支付的顺序)一次购买一杯。可以射出的弓箭的数量。

2024-04-23 13:58:00 763

原创 训练营第三十一天贪心(第三部分)

我自己是两边一起考虑的,结果失败了,失败的原因是天真了,注意要求是对于每一个孩子,糖果是要多余旁边比他小的孩子,而不是仅仅的+1就可以。也就是说[1,2,87] 得到的糖果不应该是[1,2,2],而应该是[1,2,3],因为还要保证87的糖果要大于2的糖果。,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。你从其中的一个加油站出发,开始时油箱为空。请你给每个孩子分发糖果,计算并返回需要准备的。你有一辆油箱容量无限的的汽车,从第。以这种方式修改数组后,返回数组。表示每个孩子的评分。

2024-04-22 18:53:56 267

原创 训练营第三十天贪心(第二部分)

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。当走到当前的覆盖的最大索引范围时,就要将能走的最大范围更新为在当前的最大范围内能走的最大范围,并且count要走一步,也就是保证局部最优。是确保当前的最大的覆盖范围覆盖到终点时会结束,也能保证当数组中只有一个元素即[0]时可以直接结束循环,不进行计数。假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。

2024-04-21 10:14:53 473

原创 训练营第二十九天贪心(简单题目)

每次都找最大的,也就是每次如果不满足条件,left与right都为符号一致,是单调的时,舍弃差值小的,每次只找坡度最大的,这样可以使下一次的差值的符号一定与当前符号相反。应该把三个2都删掉,所以为了避免left的不必要更新,将对left的更新放在if中,如果放在if外就是错的。局部最优也就是保证和在当前情况下是最优,如果为负数,那么也就不一定是最优,因为再加上下一个元素一定会减小。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。局部最优,如果是【1,-2,1】,那么要保证局部最优。

2024-04-20 15:31:47 532

原创 训练营第二十七天回溯(排列)

使用数组记录横向,来确保同一层不会选择相同元素,与hashset类似(前提是要求中说了nums[i]的范围是从-100到100)给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。给定一个可包含重复数字的序列 nums ,按任意顺序返回所有不重复的全排列。使用hashSet记录横向,来确保同一层不会选择相同元素。给定一个没有重复数字的序列,返回其所有可能的全排列。都是使用类似于hash映射的方式判断。深度不同的还是与之前相同。深度不同的还是与之前相同。

2024-04-18 16:16:22 699

原创 算法训练营第二十六天回溯(子集)

给你一个整数数组nums,数组中的元素。返回该数组所有可能的子集(幂集)。解集包含重复的子集。你可以按返回解集。

2024-04-16 09:56:28 325

原创 算法训练营第25天回溯(分割)

例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。表示每次的切割方案,对于深度相同的一层,切割的起始位置不变,截取长度不同,即第一次for截取a,第二层for截取aa,第三层for截取aab。示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ]切割当前的之后,再切割剩余的字符串。每个递归都是一个树枝。

2024-04-15 19:53:13 763

原创 算法训练营第24天回溯(组合)

一定要是有index,不要想当然的使用for,导致重复元素的产生一定要排序,否则剪枝会有问题对于不包含重复元素的集合,要想防止出现元素重复的组合,即[2 , 3] [3 , 2]为重复元素的组合,就要使用startIndex来限定如果是允许同一个元素在组合中多次出现,则使用对于包含重复元素的集合,除了要是有startIndex外,还需要对树层元素进行判断,否则如果是[1 ,1,2,3],target = 3,就会出现两个相同的[1,2],因为对于第一层会遍历两次,使用解决。

2024-04-11 20:11:14 946

原创 算法训练营第二十三天(二叉树完结)

通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

2024-04-10 11:22:22 1503

原创 算法训练营第二十二天(二叉树part08)

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。相当于前序遍历,利用搜索树的值的特性,注意最后一个else,包含了两种情况,一种是一左一右,一种是当前的root的值就是p或者q的val。

2024-04-10 11:20:43 753

原创 算法训练营第二十一天(二叉树part7)

示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]:一个在左右子树,一个在根。

2024-04-09 12:47:39 1494

原创 训练营第二十天(二叉树 part06)

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。注意陷阱,下面的代码就是我的一个误区,误以为只要当前子树的根大于左子树,小于右子树即可,实际上要确保根结点要小于所有右子树的结点,大于所有左子树结点。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。通过给定的数组构建最大二叉树,并且输出这个树的根节点。

2024-04-08 12:42:11 475

原创 训练营第十八天(二叉树part05)

其实就是看递归的条件,每次递归-去当前结点的值,如果达到叶子结点值为0就返回true,否则继续找,在判断左右子树时,只有最后都找完均不满足才能返回false。对于这部分的代码,必须先左再右,因为要找的是最左侧的结点,也就是会先找到左侧,这样再找到右侧时只要在同一层也不会更新。下面的两种方式等价,第一种直接对dept操作,第二中并没有更新当前的结点的dept,而是对传入的参数进行修改+1。给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

2024-04-06 19:46:23 575

原创 训练营第十七天(二叉树part04)

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定二叉树 [1,2,2,3,3,null,null,4,4]给定二叉树 [3,9,20,null,null,15,7]注意进行回溯,不然无法寻找第二条路径,每次递归就会回溯一次。给定一个二叉树,返回所有从根节点到叶子节点的路径。给定一个二叉树,判断它是否是高度平衡的二叉树。说明: 叶子节点是指没有子节点的节点。计算给定二叉树的所有左叶子之和。对于递归树,只可能出现两个情况。返回 false。

2024-04-06 19:44:29 383

原创 训练营十六天(二叉树part03)

对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树**(叶子节点也属于是满二叉树)**,然后依然可以按照情况1来计算。如果右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。

2024-04-05 19:59:22 620

原创 代码训练营第十五天(二叉树第二部分)

翻转这棵二叉树,并返回其根节点。注意递归是从root的两个子几点开始。就是之前的层次遍历多了一个反转数组。给你一棵二叉树的根节点。给你一个二叉树的根节点。, 检查它是否轴对称。

2024-04-04 21:09:16 850

原创 训练营十四天(二叉树的遍历)

单独的思路,因为不能先将根压入栈,那么如果先将left入栈会导致指针的丢失,所以要先找到左子树为空的,也就是下一个元素就是当前的栈顶,即当前子树的根结点。使用栈,因为栈是后入先出,所以使用栈来记录结点,先押入跟结点,在押入右结点和左节点,按照出栈顺序访问元素。

2024-04-03 17:50:26 450

原创 训练营第十天(栈与队列第二部分)

/一定为奇数case "+":index--;break;//除了两个,入了一个case "-":index--;break;break;break;

2024-03-30 00:01:54 1605

原创 训练营第九天(栈与队列第一部分)

但是要注意当不取对头的时候,使用了removeLastToTop()后,会导致当前的对头已经是栈顶,那么在pop的时候就会出现错误,所以在top方法中移动后一定要将当前元素重新入队,防止再次pop时出现问题。使用两个队列,每次压入元素时先放入辅助队列中,然后再将主队列中元素依次放入辅助队列中,最后调换辅助队列与主队列,每次压入的元素都是栈头,也就保证了每次都是相反的顺序。效率快很多,也有队列中的方法,方法与结果都与其相同,不同的是多了几个方法可以使其像栈一样。双端队列,既能实现栈也能实现队列,底层由。

2024-03-29 13:37:01 617

原创 第八天(字符串完结)

这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。示例 2: 输入: haystack = “aaaaa”, needle = “bba” 输出: -1。示例 1: 输入: haystack = “hello”, needle = “ll” 输出: 2。

2024-03-28 19:08:34 411

原创 训练营第七天(字符串第一部分)

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。也就是两个指针都在新扩充的数组内,但是一个指针指向原数组的尾部,一个指针指向新数组的尾部,但实际是一个数组,同时向后移动。第二行为字符串 s,代表需要旋转的字符串。,每次的left指向最后一个单词的头的前面,right指向当前单词的最后一个字母,也就类似于。

2024-03-27 12:55:40 688

原创 代码随想录训练营第六天(哈希完结,注意双指针)

主要就是一定记得双指针或固定某几个指针再使用双指针(一个指向头,一个指向尾)遇到循环的题,使用快慢指针,一个每次走一步,一个每次走两步,第一次相遇一定在环内,然后一个从头走,一个从相遇位置走,相遇位置为环的入口left++;right–;## 数组、链表、哈希表总结主要就是一定记得双指针或固定某几个指针再使用双指针(一个指向头,一个指向尾)遇到循环的题,使用快慢指针,一个每次走一步,一个每次走两步,第一次相遇一定在环内,然后一个从头走,一个从相遇位置走,相遇位置为环的入口。

2024-03-26 15:32:33 674

原创 算法训练营第五天(哈希第一部分)

注意set集合会比数组慢好多直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。所以下面先用数组自定义hash,前提是上面的提示已经将数组中值的范围给出//自定义哈希表。

2024-03-25 17:04:18 609

原创 代码随想录训练营第四天 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、0207链表相交、142.环形链表II

个人理解:除去公共部分来说,两个链表剩余的长度是不一致的,但是对于两个链表来说,除去公共部分,如果A走了除公共部分外A和B的所有结点,那么与其同时出发的B也就走了除公共部分外A和B的所有结点,那么两个结点一旦相遇一定是在公共结点相遇,因为两个走了相同的结点距离。

2024-03-23 15:03:31 505

原创 代码随想录训练营第三天 203.移除链表元素、707.设计链表、206.反转链表

主要思路是记住头结点不能动,否则头结点就丢了一定要定义两个指针分别指向前结点和当前结点,这样方便删除。

2024-03-22 21:33:10 327 1

原创 代码随想录算法训练营第二天| 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

但是这种情况增加了空间复杂度,感觉是在用空间换时间,空间复杂度变成了O(n),时间复杂度变成了O(n)唯一想到的就是冒泡排序,但是冒泡排序的时间复杂度已经是O(n^2)

2024-03-21 13:07:59 164 1

原创 代码随想录算法训练营第一天| 704.二分查找、35.搜索插入位置、27.移除元素

如果在达到结束条件前的最后一次结果是[mid + 1,right) ,那么也就意味着target要比mid+1位置上的元素要大,而right位置上的元素并不在区间内,因为在初始条件下的right就是数组长度,已经是越界的索引,所以最终的位置也就应该是right对应的索引,因为right部分并不是闭合的区间。左面的找的是等于val的,右面找的是不等于val的,然后用右边覆盖左边,因为左右都是闭区间,所以使用>=主要问题就是索引的区间的开闭问题,具化一点唯一的难度也就是。

2024-03-20 17:26:16 750

原创 1. RDF相关基础知识

RDF相关的一些基础知识

2023-10-22 20:14:57 586 2

原创 15.JAVA高级--黑马程序员

针对最小的功能单元即方法的测试,编写测试代码来对方法进行正确性测试就是Java代码里的特殊标记,比如:@Override、@Test等,作用是让其他程序根据注解信息来决定怎么执行该程序注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置//定义自定义注解//默认值为18/*使用自定义注解的简单实例*//*因为age有默认值,所以可以不用赋值,默认为18*/对象如果觉得自己身上干的事情太多,就可以转移部分工作给代理来减轻自己的工作量。

2023-09-12 22:17:01 151 1

原创 14.网络编程--黑马程序员

可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信)

2023-09-11 17:08:17 97

原创 13.多线程--黑马程序员

线程池就是一个可以复用线程的技术。

2023-09-06 11:03:12 110 1

原创 12.特殊文件--黑马程序员

本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中)可以随时以开关的形式控制日志的启停,无需侵入到源代码中去进行修改Logback官方网站Logback日志框架分为三个模块基础模块,是其他两个模块依赖的基础(必须有)完整实现了SLF4J接口的模块(必须有)与Tomcat和Jetty等Servlet容器集成,以提供HTTP访问日志的功能(可选)想使用Logback日志框架,至少需要在项目中整合如下三个模块。

2023-09-04 20:59:27 81 1

空空如也

空空如也

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

TA关注的人

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