- 博客(31)
- 收藏
- 关注
原创 给前端返回json的时间形式完善
public class WebMvcConfiguration extends WebMvcConfigurationSupport下配置。
2024-08-25 15:14:56
105
原创 swagger使用
swagger可以自动的帮助开发人员生成接口文档,并对接口进行测试, 代替postman来进行后端测试。WebMvcConfiguration类的配置。
2024-08-23 20:48:33
350
原创 归并排序代码
void merge(int l,int r){ if(l==r)return 0; int mid=(l+r)/2; merge(l,mid); merge(mid+1,r); int i=l,j=mid+1,p=l; while(i<=mid&&j<=r){ if(a[i]>a[j])temp[++p]=a[++i]; else temp[++p]=a[++j]; } whil
2024-01-20 15:05:02
362
原创 向上向下取整函数
ceil向上取整,返回double,不过可以用一个整参数接住,min的两个参数要匹配,min在algorithm文件中。ceil和floor在cmath中,floor向下取整,返回double。
2024-01-10 15:50:23
386
原创 递归函数。
在这个例子中,递归函数`factorial`计算一个正整数`n`的阶乘。否则,返回`n`与`factorial(n-1)`的乘积作为递归的递推关系。2. 确定递归的递推关系:在编写递归函数时,需要确定递归的递推关系,即当前问题与子问题之间的关系。1. 确定递归的终止条件:在编写递归函数时,需要确定递归的终止条件,以防止函数无限递归下去。3. 编写递归函数的主体代码:根据确定的递归终止条件和递推关系,编写递归函数的主体代码。在主体代码中,通常会包括对递归终止条件的判断和对子问题的递归调用。
2023-12-27 22:19:31
402
1
原创 什么时候使用双向搜索?
有时,双向搜索会引入额外的复杂性,而且并不总是比单向搜索更快。其次,如果在单向搜索中耗费了较长时间,而且搜索空间很大,那么尝试使用双向搜索可能是一个合理的选择。大佬:双向搜索适合那些有明确的起始状态和目标状态,且搜索空间较大的问题。小白:大佬,我在解决一个搜索问题,感觉搜索空间相当庞大,不知道怎么提高效率,听说双向搜索可能有帮助,什么情况下适合使用双向搜索呢?小白:好的,我会考虑一下是否尝试使用双向搜索来优化我的算法。小白:我听说在某些情况下,双向搜索可能并不比单向搜索更快,是吗?
2023-12-20 09:15:24
474
1
原创 什么时候使用启发式搜索?
启发式搜索(Heuristic Search)通常在解决搜索问题时使用,特别是当问题的搜索空间较大,全局搜索变得不切实际时。7. 贪心法的改进: 启发式搜索可以被视为贪心法的一种扩展,贪心法每次选择局部最优解,而启发式搜索则通过估计全局信息,使搜索更具方向性。1. 搜索空间庞大: 当问题的搜索空间非常庞大,无法通过穷举搜索所有可能解时,启发式搜索可以帮助缩小搜索范围,提高搜索效率。6. 状态空间连续: 如果问题的状态空间是连续的,而不是离散的,启发式搜索可以通过连续的估值函数指导搜索方向。
2023-12-19 22:40:20
595
1
原创 什么时候用启发式搜索
试着找到一个启发式函数,它能够在引导搜索时提供有效的指导,缩小搜索空间。大佬:不一定,启发式搜索通常更关注在有限时间内找到一个较好的解,而不是必然找到最优解。选择启发式函数的好坏直接关系到搜索的效率和解的质量。大佬:比如,如果你在解决迷宫问题,可以考虑使用当前状态到目标状态的曼哈顿距离作为启发式函数。小白:大佬,我在做一个搜索问题的算法题,感觉搜索空间很大,不知道从哪里下手,启发式搜索是不是一个好的选择?大佬:对的,如果搜索空间很大而且你需要在合理时间内找到一个不错的解,启发式搜索可能是个不错的选择。
2023-12-19 22:39:04
374
1
原创 map容器的使用以及与数组的结合
大佬:好的,比如你遇到一个问题,需要统计一些元素的出现次数,可以使用`map`来实现。你可以将元素作为`map`的键,出现次数作为对应的值,这样你就能方便地获取每个元素的出现次数。大佬:确实,需要注意的是`map`的键是唯一的,如果要处理重复的键,可以考虑使用`multimap`或者在`map`中使用`pair`来存储多个值。大佬:好的,假设你有一个数组,需要统计每个元素的出现次数,你可以使用`map`来实现。遍历数组,将数组元素作为`map`的键,出现次数作为对应的值。小白:好的,我会记住的。
2023-12-14 15:08:04
537
1
原创 scanf的返回值
大佬:当然,使用`scanf`时,确保格式字符串与你期望的输入格式一致,这样可以避免很多潜在的错误。大佬:如果在读取过程中发生错误,例如输入的数据类型与`scanf`的格式字符串不匹配,或者到达文件结尾,`scanf`就会返回负数,表示出现了错误。大佬:是的,判断`scanf`的返回值是一种良好的习惯。大佬:如果你期望读取数字,但用户输入了字母,`scanf`会在尝试转换时失败,返回值是0,表示没有成功匹配到任何参数。小白:嘿,大佬,我在学习C语言,不太理解`scanf`函数的返回值是什么,能解释一下吗?
2023-12-13 16:01:05
572
1
原创 图论的连通性问题
这两种算法可以用于判断图的连通性,即从一个节点出发,看是否能够访问到图中的所有节点。大佬: 不客气,连通性问题是图论中的一个基础概念,希望你在学习中能够更深入地理解它。大佬: 是的,如果两个节点是连通的,那么它们之间一定存在至少一条路径。连通性问题是图论中一个重要的主题,它关注的是图中节点之间的连接情况。小白: 明白了,连通性问题看起来很有用,可以用来判断图中节点之间的关系。小白: 你好,我听说图论可以解决一些连通性的问题,你能给我讲讲吗?小白: 那么,在图中如果有两个节点是连通的,它们之间肯定有路径吗?
2023-12-12 19:24:09
612
原创 什么时候用二级指针?
大佬: 如果直接传递指针,函数内部只会复制一份指针的值,而不会影响函数外部的指针。使用二级指针,你可以修改指针的值,使其指向新的地址,这样就能在函数外部看到改变。大佬: 当我们需要在函数中修改指针的值,而不是仅仅修改指针指向的内容时,就会用到二级指针。大佬: 假设你有一个函数,要在函数内部改变一个指针的指向,而这个指针是在函数外部定义的。大佬: 举个例子,如果你在函数内部动态分配内存给一个指针,并希望这个指针在函数外部继续使用,你就需要传递指针的地址,也就是使用二级指针。
2023-12-11 13:43:56
536
1
原创 双指针什么时候使用?
在解决ACM竞赛中的问题时,双指针是一种常用的技巧,特别适用于数组、字符串等数据结构的处理。4. 三数之和: 对于找到数组中三个数的组合使得它们的和等于目标值的问题,可以使用三个指针(左、右、中间)来处理。3. 快慢指针: 在链表中判断是否存在环、找到环的起点、判断链表中的中间节点等问题,使用快慢指针可以高效解决。2. 滑动窗口问题: 处理连续子数组或子串的问题,通过调整窗口的左右边界,使用双指针技巧来维护窗口内的状态。6. 区间合并: 在处理区间合并的问题时,可以使用左右双指针,合并相邻或有交集的区间。
2023-12-11 08:48:05
798
1
原创 贪心算法是什么?
比如,假设你有一袋硬币,每种硬币的面值都是2的幂次方(1、2、4、8、...)。贪心算法会选择尽可能大的硬币,这样找零的硬币数量就会最少。但在一些特定的场景,贪心算法能够确保最后的结果是全局最优的。大佬: 是的,有些问题贪心算法就不太适用,比如涉及到动态规划和全局最优解的情况。它适用于一些特定的问题,但在解决其他问题时,我们可能需要考虑更复杂的算法。简单来说,它每次都选择当前看起来最好的选项,而不考虑全局的情况。贪心算法会在每一步都做出在当前情况下最优的选择,而不考虑后续的影响。小白:那听起来挺简单的嘛。
2023-12-10 21:24:03
367
1
原创 递归在哪些情况下使用?
递归通常用于解决可以分解成更小规模相同形式的子问题的情况,以及具有最优子结构的问题。在实际问题中,合理的递归设计能够使算法更简洁、优雅,并提高问题求解的效率。1. 问题可以被分解成更小的、相同形式的子问题: 当问题的解决方案可以通过解决一个或多个相同形式的更小问题来构建时,递归是一种自然的选择。分治算法将问题分成若干个相互独立的子问题,递归地解决这些子问题,然后将它们的解合并起来得到原问题的解。2. 问题具有最优子结构: 如果问题的最优解可以通过子问题的最优解构造,那么递归也是一种合适的选择。
2023-12-07 15:31:57
1898
1
原创 动态规划入门
动态规划是一种解决复杂问题的算法方法,其核心思想是通过将问题分解成更小的子问题来求解。与递归不同,动态规划将已解决的子问题的解存储起来,以避免重复计算,提高算法效率。1. 最优子结构(Optimal Substructure):问题的最优解可以通过子问题的最优解来构造。也就是说,整体问题的最优解可以通过解决它的各个子问题的最优解得到。2. 重叠子问题(Overlapping Subproblems):问题可以被分解成若干个相互独立且相同的子问题。通过存储已解决的子问题的解,避免重复计算。
2023-12-06 19:56:06
538
1
原创 排列问题解决方法
利用字典序法生成排列,每次找到当前排列的下一个排列。- 使用Heap's Algorithm生成排列,通过交换元素的方式递归生成所有可能的排列。排列问题是算法中的常见问题,涉及对一组元素的不同排列方式进行处理。- 利用深度优先搜索的思想,通过访问每个节点的方式生成所有可能的排列。通过康托展开,可以将排列问题转化为数字的排列问题。- 使用递归算法,通过固定某一位的元素,递归生成剩余元素的排列。总体而言,选择合适的方法取决于问题的规模、性能需求以及具体的编程语言和库的支持情况。可以用于还原排列问题的解。
2023-12-05 10:00:30
742
1
原创 暴力枚举常见方法
请注意,尽管暴力枚举方法简单直观,但在处理大规模问题时可能效率较低,因此对于复杂问题,通常需要更高效的算法。5. 回溯算法: 通过深度优先搜索的方式遍历所有可能的解空间,当发现不可行的解时回溯到上一步。暴力枚举是一种通过遍历所有可能的解决方案来寻找问题答案的方法。1. 穷举法:通过遍历所有可能的组合或排列来找到解决方案,通常用于较小规模的问题。4. 位运算: 对于某些问题,可以使用位运算来生成所有可能的子集或组合。3. 递归枚举: 对于某些问题,可以使用递归来遍历所有可能的状态。
2023-12-04 15:39:29
463
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人