- 博客(22)
- 收藏
- 关注
原创 【Spring异常】解决 Spring Bean循环依赖
the dependencies of some of the beans in the application context form a cycle
2022-07-16 13:35:52 1954
原创 【leetcode 棒球比赛】
import java.util.ArrayList;//leetcode submit region begin(Prohibit modification and deletion)class Solution { public int calPoints(String[] ops) { int ret = 0; ArrayList<Integer> scores = new ArrayList<>(); for (.
2022-03-26 13:59:00 81
原创 【基础算法】排序算法
1.冒泡排序 public static void sort(int[] array) { // 无序数列边界,其往后的都是有序的 int lastExchangeIndex = 0; int sortBorder = array.length - 1; for (int i = 0; i < array.length; i++) { // 有序标志 boolean isSort
2022-03-26 10:16:40 98
原创 【数据结构 最小堆】
父节点比他的左右子树的值都要小。下面给出了两个方法:在最小堆中添加了一个元素后,经过上浮来重新构造最小堆 将一个完全无序的二叉树构造成最小堆,下沉。package main.java.heap;import java.util.Arrays;/** * 构造最小堆 * * @author Kimizu * @describe * @create 2022/3/25 11:54 */public class MinHeap { /** * 上浮,适合插入元素
2022-03-25 13:16:52 1396
原创 【leetcode 二叉树中序遍历】
方式一: 递归 O(n) O(n)class Solution { private List<Integer> list = new ArrayList<>(); public List<Integer> inorderTraversal(TreeNode root) { if (root != null) { if (root.left != null) { inord
2022-03-23 14:32:25 597
原创 【leetcode 打家劫舍II】
思路:将环分为两个队列,分别按照打家劫舍I来进行求解,取其最大值即可。import com.jayway.jsonpath.internal.function.numeric.Max;import java.util.Arrays;//leetcode submit region begin(Prohibit modification and deletion)class Solution { public int rob(int[] nums) { int .
2022-03-23 10:38:32 384
原创 【leetcode 打家劫舍】
思路:总的把情况分为三种:第一种:只有一间房,那么偷窃到的最大金额就是这间房的金额。第二种:只有两间房:那么偷窃到的最大金额就是这两间房的较大值。第三种:有k(k>2)间房,那么偷窃到的金额又可分为两种情况:偷第k间房,则不能偷k-1间房,偷窃总金额为偷前k-2间房屋的最高总金额与第k间房屋的金额之和。 不偷第k间房,则偷窃总金额为前k-1间房屋的最高总金额。以上两种情况我们应该取较大值,即为偷窃前k间房屋的最高总金额。用 dp[i] 表示前 ii 间房屋能偷窃到的最高总金额,
2022-03-21 14:50:09 83
原创 【leetcode 使用最小花费爬楼梯】
注意:第k阶楼梯的楼顶是它的下一阶楼梯,即k+1阶。dp[i] 标识到达第i级楼梯的最小花费对于楼梯i来说,它是楼梯i-1或楼梯i-2的楼顶,则到达i的最小花费为:到达楼梯i-1的最小花费+离开i-1的花费或者楼梯i-2的最小花费+离开i-2的花费,即:dp[i] = Math.min(dp[i-2] + cost[i-2],dp[i-1] + cost[i-1])对于给出的数组cost,他有n-1个元素,第n-1个元素的楼顶为n,故初始化dp为n+1个元素,第一阶楼梯和第二阶楼梯是可以以0花费.
2022-03-20 09:08:08 105
原创 【leetcode 爬楼梯】
思路:利用动态规划,爬到第n阶有两种情况,第一种,当前在n-1阶,第二种,当前在第n-2阶,到达第n阶就是在问到达第n-1和第n-2阶有多少种的和,所以状态转移方程dp[i] = dp[i-2] + dp[i-1],本质上就是一个斐波那契数列。//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 //// 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? //// //// 示例 1: //// //输入:n = 2//输出:2//解释:有两种方法可以爬到楼顶
2022-03-19 10:09:12 73
原创 【leetcode 斐波那契数列】
解法一:暴力递归(O^2)class Solution { public int fib(int n) { // 解法一: 暴力递归 O(n^2) if (n == 0) { return 0; } if (n == 1) { return 1; } return fib(n - 2) + fib(n - 1); }}解法二:动态规划 O
2022-03-19 09:31:25 1271
原创 【leetcode 最长公共前缀】
官方题解解法一:横向比较遍历strs,两两进行求公共前缀,一旦前缀为空串,直接返回,遍历完,返回结果。class Solution { public String longestCommonPrefix(String[] strs) { if (strs.length == 0 || strs == null) { return ""; } String prefix = strs[0]; .
2022-03-18 10:50:42 94
原创 【leetcode 基于排列构建数组】
//给你一个 从 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.//length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans 。 //// 从 0 开始的排列 nums 是一个由 0 到 nums.length - 1(0 和 nums.length - 1 也包含在内)的不同整数组成的数组。// //// //// 示例 1: //// 输入.
2022-03-18 08:53:25 116
原创 【leetcode】词典中最长的单词
使用哈希进行求解//给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。 //// 若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。 //// //// 示例 1: //// //输入:words = ["w","wo","wor","worl", "world"]//输出:"world"//解释: 单词"world"可由"w", "wo", "wor"
2022-03-18 08:34:35 165
原创 【leetcode 罗马数字转整数】
在这道题中,被那几个特殊情况给坑了,一直在处理特殊情况的匹配,大量使用了String方法,导致性能极低,看了评论区才恍然大悟,贴一个容易理解的代码。import java.util.*;class Solution { public int romanToInt(String s) { s = s.replace("IV","a"); s = s.replace("IX","b"); s = s.replace("XL","c");
2022-03-17 16:57:10 493
原创 【leetcode 回文数】
//给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 //// 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 //// // 例如,121 是回文,而 123 不是。 // //// //// 示例 1: //// //输入:x = 121//输出:true// //// 示例 2: //// //输入:x = -121//输出:false//解释:从左向右读, 为 -121 。 从右向左读, 为 12.
2022-03-16 20:09:29 109
原创 【leetcode 最长子串】
思路:建立一个窗口,窗口内由一个个字符以及位置组成,窗口内的字符都是不重复的,start指向窗口的起始位置,end指向窗口末尾的后一个字符,end每次递增都会判断当前字符是否与窗口内的字符是否重复,一旦重复,则将窗口内重复字符以及之前的字符剔除掉,然后用end - start + 1计算出这个子串长度,用max函数与之前的max比较得出最大长度,这里用hashmap作为窗口,k为字符,v为位置,在做剔除操作时,可直接跳转到窗口中重复子符后一个字符的位置上,减少不必要的start++操作,以此达到优化。代码如
2022-03-16 17:32:28 169
原创 【leetcode 两数相加】
思路:给出的链表为倒序存储实际值,所有从两结点相加实际是从低位开始相加,pre结点指向结果的头结点,但实际上这个结点不参与存储结果,结果是用cur来存储每一数位上相加的和,用carry存储其进位,在下一数位相加时加上,cur.next往后就是每一数位的和,过程同上,直到两结点l1和l2都为空,求和结束,如果carry的值此时为1,说明最后以为仍有进位,在cur其后添加一个结点就行了。代码如下:////给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能
2022-03-16 10:23:59 54
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人