- 博客(41)
- 收藏
- 关注
原创 最近公共祖先
二叉搜索树(排序树)的最近公共祖先对于排序树的定义:左孩子<根节点<右孩子,从树的根节点开始和两个节点作比较,如果当前节点的值比两个节点的值都大,则这两个节点的最近公共祖先节点一定在该节点的左子树中,则下一步遍历当前节点的左子树;如果当前节点的值比两个节点的值都小,则这两个节点的最近公共祖先节点一定在该节点的右子树中,下一步遍历当前节点的右子树;这样直到找到第一个值是两个输入节点...
2020-03-17 20:30:18 136
原创 构建乘积数组
构建乘积数组public class Solution { public int[] multiply(int[] A) { int length = A.length; int[] B = new int[length]; if(length != 0 ){ B[0] = 1; //计算下...
2020-03-16 22:21:35 118
原创 求1+2+…+n
求1+2+…+n不能使用循环,也不能使用公式,那就使用递归吧class Solution { int sum = 0;; public int sumNums(int n) { if(n < 1) return 0; if(n > 0) sum += n + sumNums(n-1); return sum; ...
2020-03-15 22:18:19 214
原创 圆圈中最后剩下的数字
圆圈中最后剩下的数字class Solution {public: int LastRemaining_Solution(int n, int m) { if(n < 1 || m < 1) //守卫代码 return -1; if(n == 1) return 0;...
2020-03-14 22:09:49 142
原创 n个骰子的点数
n个骰子的点数class Solution { public double[] twoSum(int n) { // n个骰子的表面值之和 (组合) int numsCount = n * 6 - n * 1 + 1; // 点数和的个数 //可以用滚动数组优化 int[][] dp = new int[n+1][n *...
2020-03-13 21:26:00 91
原创 翻转单词顺序
翻转单词顺序按空格切分为数组,从尾到头遍历数组,依次拼接起来。public class Solution { public String ReverseSentence(String str) { if(str.trim().length() <= 0){ return str; } String[] st...
2020-03-12 22:20:36 161
原创 数组中只出现一次的数字
数组中只出现一次的数字如果数组中只有一个数字出现了一次,对数组所有数求一次异或,两个相同的数的异或是0。那么如果数组中有两个数出现了一次,其他出现了两次,将这数组分成两个子数组,这两个数字分别出现在这两个子数组中,那么就转换成了前面所说的求异或的问题。那么怎么分呢,这里的思路是根据要求的这两个数的异或之后最右边不为1的这一位进行划分的。//num1,num2分别为长度为1的数组。传出参数/...
2020-03-11 22:07:11 181 1
原创 二叉搜索树的第K大节点
二叉搜索树的第K大节点第K大的节点就是中序遍历中的第K个节点class Solution: # 返回对应节点TreeNode res = 0 def KthNode(self, pRoot, k): # write code here if not pRoot: return left = sel...
2020-03-10 23:08:37 525
原创 两个链表的第一个公共节点
两个链表的第一个公共节点设置两个指针,一个从headA开始遍历,遍历完headA再遍历headB,另一个从headB开始遍历,遍历完headB再遍历headA,如果有交点,两个指针会同时遍历到交点处。public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2)...
2020-03-10 00:01:46 96
原创 第一个只出现一次的字符
第一个只出现一次的字符class Solution { public char firstUniqChar(String s) { // 哈希表存储,<字符,出现次数> char ans=' '; Map<Character,Integer> map=new HashMap<>(); f...
2020-03-08 20:31:40 100
原创 最长不含重复字符的子字符串
最长不含重复字符的子字符串使用HashSet将字符存储在当前窗口[i,j) (开始i=j),然后我们向右滑动索引j,如果s[j]没在HashSet中,我们继续向右滑动j。 直到s[j]已经存在HashSet中,我们当前找到的最长子字符串就是i开始到j-1的一段字符串。如果对所有的i都这样操作,就可以找到答案public static int lengthOfLongestSubstring2...
2020-03-07 21:47:10 93
原创 把数字翻译成字符串
把数字翻译成字符串递归:先解决当前数字中的第一个数字的表示情况:可能是a ~j表示,也有可能是k ~z表示,再解决剩余的数字表示问题,而剩余的数字表示问题,则跟上述步骤一样class solution { public int translateNum(int num) { if(num<10) return 1; if(num<=25&&nu...
2020-03-06 23:30:34 247
原创 数字序列中某一位的数字
数字序列中某一位的数字![在这里插入图片描述](https://img-blog.csdnimg.cn/2020030522372067.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NmMTE2OTk4MzI0MA==,size_...
2020-03-06 00:38:41 203
原创 连续子数组的最大和
连续子数组的最大和注意:是连续子数组,而不是子数组public class Solution { public int maxSubArray(int[] array) { int local_max = array[0]; int global_max = array[0]; for(int i=1;i<array.length...
2020-03-04 21:35:35 77
原创 与堆相关
#最小的K个数class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) { ArrayList<Integer> result = new ArrayList<Integer>(); int lengt...
2020-03-03 21:48:34 95
原创 字符串的排列
字符串的排列把字符串分为两个部分: 字符串的第一个字符,第一个字符后面的所有字符。1.求所有可能出现在第一个位置的字符,用索引遍历。2.求第一个字符以后的所有字符的全排列。将后面的字符又分成第一个字符以及剩余字符。import java.util.ArrayList;import java.util.TreeSet;public class Solution { public A...
2020-03-02 23:04:39 125
原创 二叉排序树
二叉排序树转化为排序的双向链表二叉排序树采用中序遍历即为排序序列,采用栈存储中序过程中的结点,时间复杂度为O(n)package 二叉平衡树转化为双向链表;import java.util.Scanner;import java.util.Stack;class Node{ public int val; public Node left; public Node rig...
2020-03-02 01:55:56 119
原创 二叉树中和为某一值的路径
二叉树中和为某一值的路径定义一个子函数,输入的是当前的根节点、当前的路径以及还需要满足的数值,同时在子函数中运用回溯的方法进行判断class Solution { public ArrayList<List<Integer>> list=new ArrayList<>(); public ArrayList<List<Integer>...
2020-02-29 21:19:03 127
原创 树
从上到下打印二叉树(树的层次遍历)思路也就是层次遍历,利用队列存储左右孩子import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;class TreeNode{ int val; TreeNode left; //默认为null TreeNode right; public ...
2020-02-28 20:43:40 126
原创 与栈相关
包含min函数的栈思路: 用一个栈A存储数据,然后另外一个栈B按照栈顶到栈底从小到大的顺序存储栈A的数据import java.util.Stack;class MinStack { private Stack<Integer> stack; //存储进栈的值 private Stack<Integer> stack2; //对值进行按小在上,大在下的顺...
2020-02-27 21:58:24 117
原创 对称二叉树
对称二叉树import java.util.Scanner;class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } public static TreeNode CreatTree(TreeNode Root) //根据先序创建二叉...
2020-02-26 21:23:39 99
原创 判断树的子树
判断树的子树思路有关树的算法十有八九都是采用递归来实现递归有三要素:单独定义一个函数判断B是不是从当前A的根节点开始的子树,这里判断是不是子树也需要一个递归的判断。如果是,则返回True,如果不是,再判断B是不是从当前A的根节点的左子节点或右子节点开始的子树。class TreeNode{ int val; TreeNode left; TreeNode ri...
2020-02-25 22:26:13 367
原创 链表
反转链表思路:两个指针,循环遍历链表,并将后者的next指向前者class ListNode{ int val;//存储元素 ListNode next; public ListNode(int val) { this.val=val; next=null; } public static ListNode Create(int[] val) { ListNode...
2020-02-24 22:32:15 2143
原创 调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面class Solution: def exchange(self, nums): list1=[] list2=[] for i in nums: if(i%2==0): list1.append(i) else: list2.append(i) return list1+list2链表中倒数第...
2020-02-23 22:26:52 107
原创 正则表达式
实现正则表达式的*和.主要考察点:*表示匹配前面的子表达式零次或多次。要匹配 *字符,则需要使用\*.匹配除换行符 \n 之外的任何单字符。要匹配 .字符 ,则需要使用 \.思路一个一个的进行匹配,如果不满足规则,则退出循环,返回false,否则循环结束后,返回true/* 说明 * 匹配前面的子表达式零次或多次。要匹配 * 字符,使用 \* . 匹配除换行符 \n 之外的...
2020-02-22 23:26:42 124 2
原创 打印数字
打印从1到最大的n位数主要的考点:n可能很大,大到int甚至long int都会溢出,怎么解决?网上看了几个题解,没看懂,看懂了一个思路最简单的:从1到n按顺序打印出从1到最大的n十进制数,其实就是n个从0到9的全排列(把数字在0之前的去掉)//打印1到最大的n位数的主方法public void printToMaxOfDigits(int n){ if(n <= 0){ ...
2020-02-21 22:00:00 2159
原创 二进制数中的个数
二进制数中1的个数public class Solution { //方法一:直接按照求二进制,然后统计余数出现的次数 public int hammingWeight(int n) { int c=0; //计数器 while(n>0) { if(n%2==1) ++c; n=n/2; } return c; }...
2020-02-20 20:40:21 353
原创 机器人运动范围
条件:当前所在格子的下标组成的数字之和不大于K不能超出格子思路一:直接遍历整个数组,统计所有满足条件的格子,但是这样的时间复杂度为O(n*m);思路二:当前所在的格子的下标组成的数字之和如果刚好等于K,那么不用往右边搜索,也不用网下方搜索,这样就能节省时间。具体做法:当前格子满足条件?是:统计+1,然后将当前格子入栈,往右走一步否:出栈,往下走一步循环上述过程,直到栈为...
2020-02-19 22:25:50 128
原创 旋转数组最小
旋转数组的最小数字题外话: 刚开始我看到题目的时候,脑子一直在想,直接遍历数组,这样最小的不就能找到最小的麽,不过去网上搜索了一下后,发现这确实是一个解决的办法,但时间复杂度为O(n),这样的答案达不到面试官的要求,所以大家做这种面试题的时候,要转换思路,在解决问题的同时,尽量给出最优解好了,分析题目,可以知道得出结论:最小元素的左边序列递增,右边序列递减初始化:首...
2020-02-18 21:20:13 111
原创 谈一谈Java的引用机制
谈一谈Java的“引用”首先说说Java的数据类型,毕竟学计算机的,一开始就要了解Java的两种数据类型:声明一下,很多同学可能会和我一样,觉得类型和类是一个东西,其实还是有区别的,从上图就可以看出,类是类型中的一种(可能说的有点不准确),好了知道这个以后,我们再谈谈引用。Java语言从C++发展而来,最重要的有一条是,Java**不支持指针类型,通过引用模型实现了指针的功能。**那...
2020-02-18 13:06:15 340
原创 斐波那契数列和青蛙跳台阶问题
斐波那契数列两种思路迭代class Solution { int start1=1,start2=1,t=0; public int numWays(int n) { for(int i=1,i<=n;i++) { t=start1+start2; start1=start2 ...
2020-02-17 19:47:44 243
原创 根据先序和中序创建二叉树
重建二叉树根据二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]创建的二叉树如下:二叉树的创建一般有两中思路,递归和借助栈来存储节点,实用递归最简洁,但是使用栈最好理解前序:根左右中序:左根右思路:分...
2020-02-16 21:13:19 3448
原创 替换空格和从头到尾打印链表
替换空格题目描述实现一个函数,把字符串 s 中的每个空格替换成"%20"。例如:输入:s = “We are happy.”输出:“We%20are%20happy.”最简单的方法,使用replace方法class Solution { public String replaceSpace(String s) { return s.replaceAl...
2020-02-15 20:07:42 141
原创 二维数组中的查找
维数组中的查找题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13...
2020-02-14 21:21:02 112
原创 数组找相同
标题面试题03:找出数组中重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。//一般思路:先将数组进行从小到大排序,如果没有元素重复,那么每个元素和它的下标应该相同,不过可以在搜索便利的时候就完成排序/*具体做法:对数组中的每个元素进行遍历,如果...
2020-02-14 20:50:04 269
原创 XGBT算法梳理
XGBoost算法梳理算法原理XGBT中的预测值是所有弱分类器上的叶子权重直接求和得到yi^=∑jwjxij\widehat{y_{i}}=\sum _{j}w_{j}x_{ij}yi=∑jwjxijl(yi,yi^)=(yi−yi^)2l(y_{i},\widehat{y_{i}})=(y_{i}-\widehat{y_{i}})^{2}l(yi,yi)=(yi−yi...
2019-04-10 21:40:51 4503
原创 GBDT算法梳理
GBDT梯度提升树CART(分类回归树)这里为什么要第一个说分类回归树呢,因为GDBT实际上也是一种集成树的算法,而每棵子树其实都是分类回归树,这里的分类树和回归树其实在字面上就可以区分,分类树的叶子节点是我们样本的类别,或者可以说是标签,而回归树,是对样本数据的某个特征的回归,也可以说是拟合,比如给你一个人的工资,身高,爱好,等等特征,要你预测一下他的年龄,这个过程用到的就是回归树.在之...
2019-04-07 20:04:46 616
原创 随机森林算法梳理
随机森林算法梳理1. 集成学习概念2. 个体学习器概念3. boosting bagging4. 结合策略(平均法,投票法,学习法)5. 随机森林思想6. 随机森林的推广7. 优缺点8. sklearn参数9. 应用场景1. 集成学习概念顾名思义,集成学习(ensemble learning)指的是将多个学习器进行有效地结合,组建一个学习系统,其中每个学习器是这个系统的组成单元,每个学习器的学...
2019-04-04 21:16:52 793
原创 决策树算法梳理
决策树算法梳理1. 信息论基础(熵,联合熵,条件熵 信息增益 基尼不纯度)2. 决策树的不同分类算法(ID3算法,C4.5,CART分类树)的原理及应用场景3. 回归树原理4. 决策树防止过拟合手段5. 评估模型6. sklearn参数详解,python绘制决策树1. 信息论基础(熵,联合熵,条件熵 信息增益 基尼不纯度)首先这里的熵EntropyEntropyEntropy是信息熵,不是...
2019-04-03 17:24:02 482
原创 逻辑回归算法梳理
逻辑回归算法梳理逻辑回归与线性回归的联系与区别:逻辑回归是一种名为"回归"的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问题中的广义回归算法.要理解逻辑回归从何而来,得要先理解线性回归,线性回归是机器学习中最简单的回归算法,它作为一个几乎人人熟悉的方程: z=θ0+θ1x1+θ2x2+...+θnxnz=\theta _{0}+\theta _{1}x_{1}+\theta ...
2019-04-01 21:10:27 282
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人