- 博客(136)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【详细代码注释】基于CNN卷积神经网络实现随机森林算法
随机森林算法简介:随机森林(Random Forest)是一种灵活性很高的机器学习算法。它的底层是利用多棵树对样本进行训练并预测的一种分类器。在机器学习的许多领域都有广泛地应用。例如构建医学疾病监测和病患易感性的预测模型。笔者自己曾经将RF算法应用于癌变细胞的检测和分析上。随机森林算法原理:随机森林的本质就是通过集成学习(Ensemble Learning)将多棵决策树集成的一种算法。那么我们先简单了解集成学习。继承学习的意义是构建并结合多个学习器来完成学..
2021-11-13 15:48:57
8041
5
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 MySQL索引优化的几种方式
索引高性能优化1. 使用独立的索引列 错误的查询语句会使得索引无效…select user_id from user where user_id-1=4;第一个例子中,对索引列user_id进行了一次方程运算,然后进行查询,然而这样的操作MySQL无法自动识别,导致主键索引失效了。select date_col from t where TO_DAYS(CURRENT_DATE) -TO_DAYS(data_col)<=15;select date_col from t where
2021-11-11 16:06:41
4868
原创 637. 二叉树的层平均值
637. 二叉树的层平均值:题目链接 :637. 二叉树的层平均值题目:给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。思路:1、带层值记录的BFS利用队列存储根节点,找到下一层其子节点加入队列。根据队列中存储节点数确定每层子节点个数。将每层节点按照广度优先顺序加入到子集合。每层中计算节点值的平均值加入到结果集合中时间复杂度:O(n+h)=O(n) n为层序遍历遍历节点数量,h为二叉树高度,进行O(h
2022-02-05 15:43:08
1925
2
原创 429. N 叉树的层序遍历
429. N 叉树的层序遍历:题目链接 :429. N 叉树的层序遍历题目:给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。思路:1、BFS(非递归)利用队列存储根节点,找到下一层其子节点加入队列。根据队列中存储节点数确定每层子节点个数。将每层节点按照广度优先顺序加入到子集合。AC代码:BFS /*// Definition for a Node.cl
2022-02-04 16:13:57
2016
原创 70. 爬楼梯
70. 爬楼梯:题目链接 :70. 爬楼梯题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?思路1:(线性)动态规划分析问题,自顶向下分析,得到递归树:DP三要素:(1)重复子问题:由递归树可得存在重复子问题。(2)无后序性:递归树上层的结果一定包含其子树结果,子树结果不会被上层修改,具有单向依赖性。(3)最优子结构:目的是要求最多的种类,子节点为父节点提供最优解。根据递归树可以自底向上找到:(
2022-02-03 19:35:59
2330
原创 53. 最大子数组和
53. 最大子数组和:题目链接 :53. 最大子数组和题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。思路1:动态规划首先分析题目要求可得,目标是得到数组元素的连续最大和,这个和可以是一个元素,但必须保证是连续n个元素之和。解决有后效性问题:有后效性指的是前面计算得到的子问题得到的值会被后序子问题的计算修改,恰如本题中,如果我们设置子问题状态位“经过某元素的最大子数组和”,那么意味着所有
2022-01-29 21:18:45
2248
原创 300. 最长递增子序列
300. 最长递增子序列:题目链接 :300. 最长递增子序列题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。思路1:动态规划首先分析题目要求可得,目标是得到严格递增的不修改数组内元素位置的最长子序列。重叠子问题:存在重叠子问题,递增子序列存在包含关系,可以使用DP策略。状态转移方程:从长度入手规定
2022-01-29 16:58:58
1754
原创 76. 最小覆盖子串
76. 最小覆盖子串:题目链接 :76. 最小覆盖子串题目:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。思路:滑动窗口先将子串t中出现元素存入hashMap,再遍历串s比较与t中重合的元素。通过重合元素的个数来确立右侧边界,并且记录不重复的元素个数Vaild当记录的元素个数达到了t串所需后,需要考虑左侧边界的收缩左边界收缩时需要判断离开窗口的元素的出现次数是否是满足t串需求,如果满
2022-01-26 16:18:30
1872
原创 3. 无重复字符的最长子串
3. 无重复字符的最长子串:题目链接 :剑指 Offer 54. 二叉搜索树的第k大节点题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。思路:经典的滑动窗口,HashMap记录每种字符的出现次数,滑动窗口的三个要素:左、右侧窗口起点,窗口大小值。本体要求窗口值为“只出现一次的字符”,那需要在记录字符出现次数的同时对字符出现次数更新,判断是否>1更新左侧窗口起点。此处的i变量代表右侧窗口终点值,所以实际返回的i-left+1就是符合题目要求的窗口值。
2022-01-25 11:43:11
1850
原创 Java包装类中valueOf() 方法
valueOf() 方法的作用?官方文档里对valueOf()方法的定义如下:Returns an Integer instance representing the specified int value. If a new Integer instance is not required, this method should generally be used in preference to the constructor Integer(int), as this method is lik
2022-01-23 16:09:42
3262
原创 快速排序模板及优化
快速排序模板及优化算法特性时间复杂度:O(N*logN)~O(N^2)最好情况:哨兵划分操作为线性时间复杂度 O(N);递归轮数共 O(logN)最坏情况:若每轮哨兵划分操作都将长度为 N 的数组划分为长度为 1 和 N - 1的两个子数组,此时递归轮数达到 N轮 。空间复杂度:O(N)非稳定: 哨兵划分操作可能改变相等元素的相对顺序。常规:哨兵+递归将数据组中最左/右侧的数据作为基准数,将它作为哨兵元素,值小于哨兵的放在其左侧,大于的放在其右侧。一轮划分结束后,转换成两
2022-01-22 16:07:25
2253
原创 冒泡排序优化
冒泡排序优化常规思路对N个数进行冒泡排序的常规思路:对相邻元素进行两两比较排序,将最大/小元素放在最后,每次确定一位缩小比较区间,共需比较 (n-1)+(n-2)+(n-3)+…+1 = n^2/2次 private static void bubbleSort(int[] arr) { int n=arr.length; for(int i=0;i<n-1;i++) { for(int j=0
2022-01-21 12:18:19
2494
原创 剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点:题目链接 :剑指 Offer 54. 二叉搜索树的第k大节点题目:给定一棵二叉搜索树,请找出其中第 k 大的节点的值。思路:本题属于通过二叉搜索树性质得到有序序列类型题目。根据中序遍历左根右,左子树元素大于右子树元素,那么可以知道,如果我们使用逆中序遍历可以优先得到树中第K大的元素。AC代码:/** * Definition for a binary tree node. * public class TreeNode { *
2022-01-19 10:03:03
2144
原创 230. 二叉搜索树中第K小的元素
230. 二叉搜索树中第K小的元素:题目链接 :230. 二叉搜索树中第K小的元素题目:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。思路:本题属于通过二叉搜索树性质得到有序序列类型题目。根据中序遍历左根右,左子树元素大于右子树元素,那么可以得到树中第K小的元素。AC代码:class Solution { int cnt=0; int res; public int kthSmall
2022-01-19 10:00:56
2170
原创 783. 二叉搜索树节点最小距离
783. 二叉搜索树节点最小距离:题目链接 :783. 二叉搜索树节点最小距离题目:给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。思路:本题属于通过二叉搜索树性质得到有序序列类型题目。根据中序遍历左根右,左子树元素大于右子树元素,可以确定最大元素和最小元素的范围。使用一个节点prev保存左子树元素,node每次指向新的右子树元素,并设置全局变量的最小值进行递归更新。AC代码:/** * Defi
2022-01-17 11:10:43
2010
1
原创 107. 二叉树的层序遍历 II
107. 二叉树的层序遍历 II:题目链接 :107. 二叉树的层序遍历 II题目:给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)思路:正常的BFS层序遍历。加入集合时注意倒序加入。AC代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;
2022-01-16 14:48:55
2111
原创 662. 二叉树最大宽度
662. 二叉树最大宽度:题目链接 :111. 二叉树的最小深度题目:给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。思路:BFS+完全二叉树性质需要维护两个集合,依然是使用双向队列存储层序中每层的节点,对其左右节点的序号差与初始化的最大宽度之间做比较。特别注意:对比层内
2022-01-16 10:59:37
2295
原创 111. 二叉树的最小深度
111. 二叉树的最小深度:题目链接 :111. 二叉树的最小深度题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。思路:递归,考虑四种情况即可AC代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode ri
2022-01-15 16:53:33
2096
原创 106. 从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树:题目链接 :106. 从中序与后序遍历序列构造二叉树题目:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。思路:本体和105为姊妹题,递归方法来说目的一致:找到根节点和其左右子树在两种序列中的范围。首先根据后序最后一个节点找到root,然后根据中序遍历的规律,root值对应Index的左侧为其左子树,右侧为其右子树,那么可以判断左右子树的范围。根据中序得到的左子树序列去寻找后序中的左右子树范围,后序遍历是左右根,
2022-01-14 11:29:44
2269
原创 71. 简化路径
71. 简化路径:题目链接 :71. 简化路径题目:给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。请注意,返回的 规范路
2022-01-06 17:04:52
2190
原创 1576. 替换所有的问号
1576. 替换所有的问号:题目链接 :1576. 替换所有的问号题目:给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 ‘?’ 字符。题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。思路:思路:简单的模拟,注意以下两个点
2022-01-05 16:01:29
2184
原创 114. 二叉树展开为链表
114. 二叉树展开为链表:题目链接 :114. 二叉树展开为链表题目:给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。思路:1、迭代:先序根的左子树替换其右子树位置原右子树放到左子树右侧考虑原右子树为根节点的子树内的位置关系AC代码:/** * Definition for a
2021-11-30 23:56:26
2419
原创 226. 翻转二叉树
226. 翻转二叉树:题目链接 :226. 翻转二叉树题目:翻转一棵二叉树。思路:1、递归:每层左右节点值交换AC代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val
2021-11-30 23:54:56
2386
原创 101. 对称二叉树
101. 对称二叉树:题目链接 :101. 对称二叉树题目:给定一个二叉树,检查它是否是镜像对称的。思路:1、递归:对当前节点的左右子树判断对其左右子树的左右子树分别进行交替判断,即n1的左子树和n2的右子树判断,反之亦然。AC代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNo
2021-11-30 23:52:33
2325
原创 98. 验证二叉搜索树
98. 验证二叉搜索树:题目链接 :98. 验证二叉搜索树题目:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树思路:1、递归函数功能:判断当前节点是否符合搜索树条件判断其左右子树是否符合条件需要初始化两个边界值供比对AC代码:/** * Definition for a bina
2021-11-30 23:51:21
2373
原创 543. 二叉树的直径
543. 二叉树的直径:题目链接 :543. 二叉树的直径题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。思路:1、递归计算,划分子问题为:左子树的最长路径右子树的最长路径经过当前根节点的最长路径(左子树深度+右子树深度)明确递归子问题后,我们分别对三个子问题进行求解,注意这里我们使用了在线算法:即将递归子问题中得到的变量与一个维护的全局变量进行比对,保留二者中符合条件的。还要
2021-11-30 23:49:41
2432
原创 105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树:题目链接 :105. 从前序与中序遍历序列构造二叉树题目:给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。思路:1、递归函数:根据前序和中序遍历规律,首先找到根节点,从而判断左右子树的边界在数组对应左右子树的范围内递归不断寻找根节点为了减少每次寻找根节点的时空开销,将节点放入HashMap,需要其作为根节点出现时getAC代码: /** * Definition
2021-11-30 23:46:28
2316
原创 104. 二叉树的最大深度
104. 二叉树的最大深度:题目链接 :104. 二叉树的最大深度题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。思路:1、迭代:这道题递归比迭代效率高经典的带二叉树层次遍历带深度模板,easyAC代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; *
2021-11-30 23:34:25
2305
原创 236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先:题目链接 :[199. 二叉树的右视图](https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”思路:1、递归:前序遍历
2021-11-30 23:22:38
2306
原创 199. 二叉树的右视图
199. 二叉树的右视图:题目链接 :199. 二叉树的右视图题目:给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值思路:1、BFS(层序):记录每层最后一个元素,加入集合,层序为根左2、DFS(递归):先右后左,保证每层先访问右节点。AC代码:BFS class Solution { private List<Integer> ans = new ArrayList<>();
2021-11-30 23:18:03
2822
原创 103. 二叉树的锯齿形层序遍历
103. 二叉树的锯齿形层序遍历:题目链接 :103. 二叉树的锯齿形层序遍历题目:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。思路:1、BFS:在102的基础上增加了层数值的判断:奇数层自左向右遍历层值偶数自右向左AC代码:BFS /** * Definition for a binary tree node. * public class TreeNode { *
2021-11-30 23:09:39
2396
原创 102. 二叉树的层序遍历
102. 二叉树的层序遍历:题目链接 :285. 二叉搜索树中的中序后继题目:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。思路:1、BFS(非递归)利用带层次标记的模板2、DFS(递归)需要记录层数值level,在到达新一层的时候为其开辟空间使用递归关键是记住函数需要哪些参数:List<List> 类型的集合当前TreeNode节点当前层数levelAC代码:BFS /**
2021-11-21 22:45:54
2411
原创 【手撕算法】划分链表(不使用额外空间)
题目:给出一个长度为 n 的单链表和一个值 x ,单链表的每一个值为 listi ,请返回一个链表的头结点,要求新链表中小于 x 的节点全部在大于等于 x 的节点左侧,并且两个部分之内的节点之间与原来的链表要保持相对顺序不变。例如:给出 {1,4,3,2,5,2},3返回 {1,2,2,4,3,5}思路:不使用额外空间划分,这要求我们声明两个链表头,分别存储<目标值的元素和>目标值的元素。链表分割后进行合并,小于段的尾连接大于段的头import java.util.*;.
2021-11-18 22:00:01
2754
原创 【详解】Java内存模型中 happens-before规则
Java内存模型中 happens-before规则如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作课件,并且第一个操作的执行顺序排在第二个操作之前。两个操作间存在happens-before关系,不意味着Java平台一定按照被该关系制定的顺序执行,如果重排序后不按照该顺序,但结果一致,那么这种重排序合法。程序顺序规则:一个线程中,按照程序执行的顺序,前面的操作happens-before于后面的操作。也就是符合单线程的思维,程序在前面对变量
2021-11-14 12:58:53
2899
原创 从CPU层面解释,为什么会有并发问题?
CPU优化导致并发异常的三个问题CPU增加缓存,均衡与内存间的速度差异(可见性问题):可见性:一个线程对共享变量的修改,能立刻被其他线程嗅探到。对于多核设备,每个线程被分配在一个处理器上运行,都有各自的CPU缓存。又因为同一个进程上的多个线程共享同一块内存空间。单核理想情况下:线程运算的结果首先进入各自CPU缓存后存入内存,其他线程的CPU缓存嗅探到内存中变量值改变,使自身缓存无效。但是在并发情况下,多线程同时对共享变量值修改,无法即使刷新入内存,导致实际上运算利用自身C
2021-11-13 15:43:02
3659
原创 翻遍了三本书,我总结了这些MySQL索引高频知识
MySQL索引高频总结当谈论索引的时候,我们在谈论什么?“索引”是一种由存储引擎实现的,用于快速查找记录的一种数据结构,举例来说,就像大部书的目录。复杂的ORM工具也只能创建主键相关的索引查询,在数据库的查询优化方面,对索引的优化举足轻重,因此了解和学习索引,依然十分重要。1. 使用索引优势劣势优势:使用索引,很大程度地减少了需要对数据库数据的扫描量,对数据的检索不必全盘扫描,减少了对数据库的I/O次数。B-Tree索引不但可以在叶子节点中存储数据,并且按照顺序存储,因此对于常见的分组和排
2021-11-02 12:53:28
2514
5
原创 剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 055. 二叉搜索树迭代器:题目链接 :1038. 把二叉搜索树转换为累加树题目:实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存
2021-10-29 15:01:12
2556
原创 1038. 把二叉搜索树转换为累加树
1038. 把二叉搜索树转换为累加树:题目链接 :1038. 把二叉搜索树转换为累加树题目:给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。思路:1、反中序遍历,找比当前节点大的值,进行加的累AC代码: /** * Definition for a binary tree
2021-10-29 14:56:28
6386
原创 538. 把二叉搜索树转换为累加树
538. 把二叉搜索树转换为累加树:题目链接 :538. 把二叉搜索树转换为累加树题目:给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。思路:1、反中序遍历,找比当前节点大的值,进行加的累AC代码: /** * Definition for a binary tree n
2021-10-29 14:54:09
6732
原创 剑指 Offer II 054. 所有大于等于节点的值之和
剑指 Offer II 054. 所有大于等于节点的值之和:题目链接 :剑指 Offer II 054. 所有大于等于节点的值之和题目:给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。思路:1、反中序遍历,找比当前节点大的值,进行加的累AC代码: /** * Defini
2021-10-29 14:52:43
6002
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人