自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 记录一次cpu爆满问题

通过命令 打印快照 后续分析 jmap -dump:format=b,file=文件路径/dumpfile.hprof 7。top -p 7 只展示java进程 然后按大写H 显示下面具体线程占用率。这里确定了java进程占用率过高,查看具体线程cpu占用率。发现fullgc 频率过高 old区无法清空。首先top查看了一下cpu占用率。发现VM Thread占用率过高。查看一下是否有大对象无法清理。

2023-07-09 20:34:18 164

原创 mysql学习笔记

今天学到了一个新函数的使用方法 ROW_NUMBER() 主要目的是给数据一个行号。这样相当于按工人和项目分组之后按时间排序,取的是每个人每个项目最晚进场时间的一条。这样使用了子查询效率非常差。

2023-04-28 17:50:40 870

原创 Java LeetCode 10. 正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 '’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: 输入:s = “aa” p = “a” 输出:false 解释:“a” 无法匹配 “aa” 整个字符串。 示例 2: 输入:s = “aa” p = "a" 输出:true 解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘a’。因此,字符串

2021-01-25 00:56:55 225

原创 Java LeetCode 151. 翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。 说明: 无空格字符构成一个 单词 。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 示例 1: 输入:“the sky is blue” 输出:"blue is sky the" 犹豫递归是从后往前推,可以利用这个性质,进行反转 class Solution { public String reverseWords(String s) { Stri

2021-01-24 16:25:46 151

原创 Java LeetCode 14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs = [“flower”,“flow”,“flight”] 输出:"fl" 通过分治算法,分解后再合并 class Solution { public String longestCommonPrefix(String[] strs) { if(strs==null||strs.length==0){ return ""; }

2021-01-24 12:23:57 86

原创 Java LeetCode 231. 2的幂

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 1: 输入: 1 输出: true 解释: 20 = 1 这里使用了公式 n&(n-1)为把位置在最后的1转成0 2的幂次方的二进制里只有1个1,根据这个性质把这唯一的1转换成0之后必然和0相等,如果不相等就说明不是2的幂次方 class Solution { public boolean isPowerOfTwo(int n) { if(n<=0){ return false;

2021-01-17 12:10:48 67

原创 Java LeetCode 714. 买卖股票的最佳时机含手续费

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。 你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。 返回获得利润的最大值。 注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。 示例 1: 输入: prices = [1, 3, 2, 8, 4, 9], fee = 2 输出: 8 解释: 能够达到的最大利润: 在此处买入 pri

2020-12-23 23:43:04 59

原创 Java LeetCode 309. 最佳买卖股票时机含冷冻期

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出] class Solution { public int maxProfit(int

2020-12-23 23:30:52 55

原创 Java LeetCode 121. 买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。 class Soluti

2020-12-23 21:26:12 87

原创 Java LeetCode 1143. 最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。 若这两个字符串没有公共子序列,则返回 0。 示例 1: 输入:text1 = “abcde”, text2 = “ace”

2020-12-20 20:08:03 114

原创 Java LeetCode 72. 编辑距离

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 = “horse”, word2 = “ros” 输出:3 解释: horse -> rorse (将 ‘h’ 替换为 ‘r’) rorse -> rose (删除 ‘r’) rose -> ros (删除 ‘e’) 动态规划 如例子中dp[i][j] dp[5][3] =

2020-12-20 00:40:25 148 1

原创 Java LeetCode 5. 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: "bb" 动态规划,二维dp数组,i和j代表下标,dp[i][j]=true表示字符串s从i到j的位置是回文子串,如果为false则不是,然后计算true的长度。 class Solution { public String longestPalindrome(String

2020-12-20 00:21:15 103 1

原创 Java LeetCode 300. 最长递增子序列

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 动态规划 遍历数组,把每个元素所在的最大长度存入dp数组中,,最后一个位置dp[i]的最大长度为之前小于该元素中最大长度+1 cla

2020-12-15 22:47:38 279

原创 Java LeetCode 322. 零钱兑换

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 示例 1: 输入:coins = [1, 2, 5], amount = 11 输出:3 解释:11 = 5 + 5 + 1 动态规划初学,从小到大,, dp数组记录了每个0,1…,n-2,n-1 这些数每个总金额所需要的最少硬币数 每个金额所需最少硬币数为dp[i-coin]+1;(coin为硬币金额,这里

2020-12-15 21:59:06 71

原创 Java LeetCode 33. 搜索旋转排序数组

给你一个整数数组 nums ,和一个整数 target 。 该整数数组原本是按升序排列,但输入时在预先未知的某个点上进行了旋转。(例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 示例 1: 输入:nums = [4,5,6,7,0,1,2], target = 0 输出:4 示例 2: 输入:nums = [4,5,6,7,0,1,2], target = 3 输出:-

2020-12-14 00:22:16 128

原创 Java LeetCOde 74. 搜索二维矩阵

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 class Solution { public boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length; if(m==0){ return false; }

2020-12-14 00:06:57 150

原创 Java LeetCode 153. 寻找旋转排序数组中的最小值

假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。 请找出其中最小的元素。 示例 1: 输入:nums = [3,4,5,1,2] 输出:1 示例 2: 输入:nums = [4,5,6,7,0,1,2] 输出:0 示例 3: 输入:nums = [1] 输出:1 class Solution { public int findMin(int[] nums) { int left=0;

2020-12-13 23:54:41 70

原创 Java LeetCode 51. N 皇后

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后问题的一种解法。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。 每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。 回溯算法 非常好的题解和动画在这里 class Solution { public List<List<String>> solveNQueens(int n) {

2020-12-13 21:23:03 77

原创 Java LeetCode 69. x 的平方根

实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 class Solution { public int mySqrt(int x) { if(x<=1){ return x;

2020-12-13 21:22:47 67

原创 Java LeetCode 102. 二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 广度优先遍历 bfs /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { p

2020-12-09 21:25:19 68

原创 Java LeetCode 104. 二叉树的最大深度

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 深度优先遍历dfs class Solution { public int maxDepth(TreeNode root) { if(root==null){ return 0; } return Math.max(maxDe

2020-12-09 21:24:06 47

原创 Java LeetCode 169. 多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2 本道题很多解法,这里列出三种 1.摩尔投票法 简单的来说就是遍历数组中所有数,不相同就销毁,剩下的就一定是众数 class Solution { public int majorityElement(int[] nums) {

2020-12-09 09:30:52 91

原创 Java LeetCode 77. 组合

给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] class Solution { public List<List<Integer>> combine(int n, int k) { Deque<Integer> que = new LinkedList(); Li

2020-12-07 23:24:05 38

原创 Java LeetCode 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. class Solution { public List<String> letterCombinations(String digits) { List<String> res

2020-12-07 18:39:17 38

原创 Java LeetCode 90. 子集 II

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 这道题最重要的是剪枝的思想,首先如果当前遍历元素已经为true,则不用继续往下找了,,如果当前遍历元素和上一个元素相同,且上一个元素没有被使用过,那表示在下面上一个元素一定会出现,这样也不符合要求,也需要剔除 class Solution { public List&l

2020-12-07 09:27:33 87

原创 Java LeetCode 78. 子集

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>>

2020-12-06 22:59:04 61

原创 Java LeetCode 47. 全排列 II

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums = [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]] 示例 2: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] class Solution { public List<List<Integer>> permuteUnique(int[] num

2020-12-06 22:45:04 83

原创 Java LeetCode 46. 全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = new ArrayList();//用来存放

2020-12-06 15:43:16 44

原创 Java LeetCode 50. Pow(x, n)

实现 pow(x, n) ,即计算 x 的 n 次幂函数。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 示例 3: 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 手动实现pow,用分治算法 class Solution { public double myPow(double x, int n) { if(n==0){

2020-12-05 22:54:08 76

原创 Java LeetCode 236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 左(右)子树如果没有,则返回第一个右(左)子树找到的, 如果左右子树都找到了,则直接返回根节点 /** * Definition for a binary tr

2020-12-05 21:24:03 70 1

原创 Java LeetCode 111. 二叉树的最小深度

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 广度优先遍历,把每一行的节点挨个处理 /** * Definition for a binary tree node. * public class Tree

2020-12-05 21:19:22 59

原创 Java LeetCode 204. 计数质数

统计所有小于非负整数 n 的质数的数量。 示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 示例 2: 输入:n = 0 输出:0 示例 3: 输入:n = 1 输出:0 质数(Prime number),又称素数,指在大于 1 的自然数中,除了 1 和该数自身外,无法被其他自然数整除的数。 ———维基百科 这里用到筛选法,从2开始遍历,遍历到sqrt(n)即可,因为再往后是重复运算 如果该元素i的位置为true,(为false则表示已

2020-12-03 16:33:28 77

原创 剑指 Offer 40. 最小的k个数

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 1: 输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2: 输入:arr = [0,1,2,1], k = 1 输出:[0] class Solution { public int[] getLeastNumbers(int[] arr, int k) { if(arr.length==0||arr=

2020-11-29 23:18:09 50

原创 Java LeetCode 347. 前 K 个高频元素

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer,Integer> hash = new HashMap(); for(int

2020-11-29 23:02:56 66

原创 Java LeetCode 95. 不同的二叉搜索树 II

给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。 class Solution { public List<TreeNode> generateTrees(int n) { if(n==0){ return new ArrayList(); } return rever(1,n); } public List<TreeNode> rever(int

2020-11-28 23:32:51 53

原创 Java LeetCode 108. 将有序数组转换为二叉搜索树

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ cl

2020-11-28 23:17:32 49

原创 Java LeetCode 96. 不同的二叉搜索树

给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? 这里利用了map进行缓存每个n的遍历次数,这样极大减少了构建次数,加快了时间。 class Solution { Map<Integer,Integer> map = new HashMap(); public int numTrees(int n) { int sum=0; if(n<=1){ map.put(n,1);

2020-11-28 22:52:50 74

原创 Java LeetCode 106. 从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 首先定义一个map,key用来存放中序遍历数组中的值,value存放位置 这个图很重要,因为后序遍历最后一个元素一定是根节点,通过这个根节点map里的数值可以找到中序遍历里面根节点位置,根节点左边的就是左子树,右边的就是右子树 然后同时可以通过中序遍历在后序遍历中找到左子树和右子树的位置,

2020-11-25 23:39:38 127 1

原创 Java LeetCode 226. 翻转二叉树

翻转一棵二叉树。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode invertTree(TreeNode root) {

2020-11-25 23:11:06 35

原创 Java LeetCode 106. 从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean is

2020-11-25 23:03:20 32

空空如也

空空如也

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

TA关注的人

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