自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Juliussss

联系邮箱jiyf@mail.ustc.edu.cn

  • 博客(124)
  • 收藏
  • 关注

原创 LeetCode 96. Unique Binary Search Trees

1、需要考虑每个结点放在最顶端的情况。2、每个结点放在最顶端时,看看左边有多少个结点和右边有多少个结点。3、假设n个节点存在二叉排序树的个数是G(n),令f(i)为以i为根的二叉搜索树的个数,则G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n)G(n)=f(1)+f(2)+f(3)+f(4)+...+f(n)当i为根节点时,其左子树节点个数为i...

2019-07-08 15:16:26 141

原创 一些Java方面的疑问

为什么使用接口?答:在一个项目中,有很多功能并不是一个类去实现,而是由很多类去实现,这时就需要一个规范,而接口就是提供了统一的规范。...

2019-06-28 10:31:04 206

原创 牛客网SQL实战~持续更新

一、命令汇总except集合差,union集合并,intersect集合交inner join返回的是两个表完全匹配的信息,left join返回左表全部信息和右表存在的信息,right join返回右表全部信息和左表存在的信息,full join是left join和right join的并集二、题目练习1、查找最晚入职员工的所有信息正确做法select * from ...

2019-06-17 15:58:45 378

原创 常用排序算法

1、冒泡排序package sort;public class Bubble_Sort { public static void main(String[] args) { int[] nums={6,5,4,3,1,2}; int n=nums.length; boolean flag=false; for (in...

2019-06-13 13:14:53 118

原创 常用sql语句

现在又一个库作为学生信息库,有三个表,课程,成绩,学生信息。1、打印学生的选课数,课程总分,平均分select student_id,count(course_id),sum(score),avg(score) from xiangzai.score group by student_id;2、打印学生id,选课数,总成绩,平均成绩,最高分数,最低分数select stu.stud...

2019-06-12 14:36:29 136

转载 Java特性

转载自https://www.cnblogs.com/Dream2hc/p/java0002.html一、抽象父类为子类提供一些属性和行为,子类根据业务需求实现具体的行为。抽象类使用abstract进行修饰,子类要实现所有的父类抽象方法否则子类也是抽象类。二、封装把对象的属性和行为(方法)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节;在java中,对于对象的内部属性...

2019-06-12 10:22:48 113

原创 lambda表达式

目录1、为什么引入lambda表达式2、lambda表达式形式3、lambda表达式优缺点4、lambda的应用示例1、为什引入lambda表达式: lambda是一个可以传递的代码块,可以在以后执行一次或多次。lambda表达式允许把函数作为一个方法的参数(函数作为参数传递进方法中)2、lambda表达式形式 一般形式为:参数,箭头(->)以及一...

2019-06-12 10:16:53 656

原创 背包问题

假设物品的编号是从1到n,记录物品重量的数组为w,记录物品价值的数组为v,一件一件物品考虑是否放入背包。定义一个用于动态规划的数组dp,dp[x][y]代表前x件物品,不超过重量y的时候的最大价值。(注意,dp数组大小最好设置成w.length+1,y+1)第x件物品有两种情况,选或者不选:一、选择第x件物品,前x-1件物品的重量不能超过y-w[x]二、不选择第x件物品,前x-1件...

2019-06-12 09:43:48 98

原创 Java静态变量和非静态变量

内存分配:静态方法和静态变量创建之后一直使用同一块内存,是连续的。非静态方法会存在于内存的多个地方,是离散的。生命周期:静态变量的生存周期是应用的生存周期。非静态变量的存在周期取决于实例化的类的存在周期。调用方式:静态变量只能是“Class.静态变量”来调用,类的实例不能调用。非静态变量在变量所在的类实例化后才可以通过实例化的类名访问。共享方式:静态变量时全局变量,线程安全。非静态变量...

2019-06-11 14:55:47 800

原创 Java线程同步

线程同步:Java中多线程并发控制如果多个线程同时对一个共享变量增删改查,那么会发生冲突,所以要加入同步锁来保证一个变量只能被一个线程锁定,从而保证了变量的唯一性和准确性。同步方法用synchronized关键字修饰方法。当用此关键字修饰方法,内置锁会保护整个方法。如果用synchronized修饰static方法,那么调用这个方法时会锁住整个类。 2.同步代码块用sync...

2019-06-10 23:18:26 125

原创 SQL相关

一、=,IN,LIKE的区别=比较的是单一的值,IN是多个值,LIKE是匹配的模式select * from wenda.comment;SELECT * FROM wenda.comment where id=1;select * from wenda.comment where id in (1,2,3,4);select * from wenda.comment where ...

2019-06-10 18:18:47 122

原创 Java8的新特性

Lambda表达式——允许把函数作为一个方法的参数传递到方法中,可以执行一次或者多次。lambda表达式的形式一般为:参数,箭头(->),和一个表达式。 方法引用——方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言结构更紧凑简洁,减少冗余代码。 默认方法——默认方法就是在一个接口里面有了一个实现的方法 新工...

2019-06-10 16:19:14 150

原创 Executor框架以及线程池的分类

一、Executor框架Executor是一个接口,提供了一种标准方法将任务的提交过程与执行过程解耦开来。Executor的各种实现类,还提供了对生命周期的支持。Executor基于生产-消费者模式,提交任务的操作相当于生产者,而执行任务的线程相当于消费者。Executor的两级调度模型:在上层,Java多线程程序通常把应用分解为若干个任务,然后使用用户级的调度器(Executor框架)...

2019-06-09 21:53:51 295

原创 哈希冲突

问题一、什么是哈希冲突由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。(两个不同的数据计算后的结果一样)问题二、如何解决哈希冲突1、开放地址法(再散列法) 线性探查法 平方探查法 双散列函数探查法2、链地址法(拉链法)3、再哈希法4、创建公共溢出区详细解释:1、开放地...

2019-06-09 21:12:41 19055

原创 Java抽象类和抽象方法

首先,为什么需要定义抽象类:如上图所示,Employee和Student拥有相同的属性-姓名。所以可以将getName方法放在位于继承关系较高层次的通用超类中。但是有的Employee和Student共同属性中不方便在Persion中实现,比如要实现一个getDescription方法,需要在Employee和Student中单独实现,这时,Person可以只定义getDescriptio...

2019-06-09 17:38:09 529

原创 GC Roots可达性分析以及GC Roots的对象

可达性分析算法的基本思路就是通过一系列称为“GC Roots”的对象作为起点,从这些结点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的,为可回收对象。图中,右边部分都是不可达的对象,都是可回收对象。在Java语言中,可以作为GC Roots的对象...

2019-06-09 16:57:49 3095 1

转载 Java中的接口

Java 接口接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被...

2019-06-09 14:55:25 107

转载 Spring框架的七个模块

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 Spring 上下文:Spring 上下文是一...

2019-06-04 16:04:03 983

原创 依赖注入的三种方式

Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入(Construct注入),setter注入,基于注解的注入(接口注入)。(参考https://blog.csdn.net/jinchaoh/article/details/80246577)构造方法注入如果只有一个有参数的构造方法并且参数类型与注入的bean的类型匹配,那就会注入到该构造方法中。...

2019-06-03 14:33:44 38413 3

原创 autowired和resource区别

共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。不同点:1、@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依...

2019-06-03 11:10:01 508

原创 66、机器人的运动范围

使用递归,做法和65题的找路径基本一致public class Solution { public int movingCount(int threshold, int rows, int cols) { boolean[] isvisted=new boolean[rows*cols]; for(boolean v:isvisted){ ...

2019-06-03 09:58:51 95

原创 65、矩阵中的路径

写一个递归函数即可。因为规定不能走已经走过的路,所以定义一个rows*cols大小的boolean数组,用来表示当前结点是否已经走过。在遍历过程中还要用到回溯,因为如果一条路没走下去,那么这条路就要把状态更新为没走过。递归的终止条件:row<0,col<0,row>=rows,col>=cols,isvisted[row*cols+col]==true,str[len]...

2019-06-03 09:58:39 89

原创 64、滑动窗口的最大值

方法一:暴力解法,遍历即可import java.util.*;public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Integer> list=new ArrayList<Integer&...

2019-06-03 09:58:28 349

原创 63、数据流的中位数

用一个列表存放数据并读取即可import java.util.*;public class Solution { ArrayList<Double> list=new ArrayList<>(); public void Insert(Integer num) { list.add((double)num); } pu...

2019-06-03 09:58:16 112

原创 62、二叉搜索树的第k个结点

方法一:二叉搜索树的中序遍历为递增的,所以进行一遍中序遍历将结点放入列表中,然后找到列表的第k个值即可。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val...

2019-06-03 09:58:02 84

原创 61、序列化二叉树

采用先序遍历序列化,然后先序遍历解序列化。序列化的时候每个结点值后面都要加一个"!"用来分隔。如果遇到空结点那就加"#"表示。import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeN...

2019-06-03 09:57:45 85

原创 60、把二叉树打印成多行

定义一个队列queue和一个last指针以及nLast指针,先将根节点push到queue中,从队列中pop出一个节点然后将节点的左孩子和右孩子分别push到queue中。nLast一直是跟随着最近一个被push的结点。当last等于刚pop出的结点时,向二维列表中添加一次数据并让last=nLast。循环执行,直到队列为空。import java.util.ArrayList;impor...

2019-06-03 09:57:31 74

原创 59、按之字形顺序打印二叉树

定义两个栈stk1和stk2。先讲根结点push到stk1中,然后做循环while,当stk1不为空,从stk1中pop结点并将结点左孩子和有孩子依次push到stk2中。然后另一个while做循环,stk2不为空,从stk2中pop出结点并将结点到右孩子和左孩子依次放入栈中。大循环终止条件是stk1和stk2都为空。心得:一般要改变顺序的题,基本都要考虑一下栈。import java....

2019-06-02 12:51:37 85

原创 58、对称的二叉树

思想就是判断左右子树的值是否相等,递归判断左子树的右子树对比右子树的左子树,左子树的左子树对比右子树的右子树。如果两边同时递归到了空的值,就返回true。如果只有一边到了空,就返回false。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; ...

2019-06-02 12:09:59 71

原创 57、二叉树的下一个结点

方法一:通过不停的使用next指针找到这棵树的根节点。然后利用中序遍历,将遍历结果放入一个ArrayList,然后找到这个pNode的位置,即可返回下一个结点/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkN...

2019-06-02 11:38:41 124

原创 56、删除链表中重复结点

定义两个指针,一个是当前指针cur,一个是下一个结点指针t,每次先遍历t,遇到重复的值要跳过,然后让cur的next为t,cur再变成cur.next。最后还要让指针指向空,这样才是一个完整去重链表。/* public class ListNode { int val; ListNode next = null; ListNode(int val) { ...

2019-06-02 10:22:24 78

原创 55、链表中环的入口结点

定义一个快指针一个慢指针。如果两个指针能相遇,那么就代表有环。然后让慢指针继续往下走,快指针回到链表头部,一次走一步,然后两个指针相遇的地方就是环的入口。/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; ...

2019-06-02 10:19:32 87

原创 54、字符流中第一个不重复的字符

由于ascii码的范围是0~127,定义一个大小为128的数组,每出现一个字符,数组中字符对应的下标的位置将数值加一。然后取的时候,遍历list,看哪个对应的数组中的值为1即可,没有则返回‘#’import java.util.*;public class Solution { //Insert one char from stringstream int []a=ne...

2019-06-02 10:19:19 89

原创 53、表示数值的字符串

设置两个参分别表示是否出现过E/e和是否出现过'.',然后遍历一遍数组:当遇到e/E:如果之前出现过e/E,返回false,如果e/E是出现在数组最后一个位置,返回false当遇到'+','-':如果这个符号不是第一个位置,而且前面一个字符不是e,那么就返回false,如果字符出现在最后一个位置,返回false当遇到'.':如果这个符号出现之前出现过e/E,或者之前还出现过'.',或者...

2019-06-02 10:19:06 83

原创 52、正则表达式匹配

理清规则然后将规则写入递归即可:核心:将题目分解为第二个字符是不是'*'这两种情况。终止条件:1、str和pattern都同时遍历到最后,返回true。2、str遍历还没结束,pattern就已经遍历完,返回false不同情形:1、如果pattern的下一个字符是'*',有两种大情况,一种是str当前字符不等于pattern字符,一种是等于(pattern字符为'.'的时候也相当于等于...

2019-06-02 10:18:52 119

原创 51、构建乘积数组

要尽量减少乘法的次数,画一个二维矩阵然后就可以发现规律,将不能加入乘法的那个数当作1,然后连成一条线,就会发现数组左边和右边分别是三角形,每一行都只需要将前一行或者后一行乘以一个数即可。遍历两个三角形,将每一行的值存到数组,然后再遍历两个数组,就可以得出最后乘积数组啦import java.util.ArrayList;public class Solution { publi...

2019-06-02 10:18:41 81

原创 50、数组中重复的数字

定义一个map,遍历数组,遍历到的数字未出现在map中则put一下,出现了就返回这个数字即可import java.util.*;public class Solution { // Parameters: // numbers: an array of integers // length: the length of array n...

2019-06-02 10:18:25 71

原创 49、把字符串转换成整数

利用好ascii的知识和substring用法就够public class Solution { public int StrToInt(String str) { str.trim(); if(str.equals("")){ return 0; } for(int i=0;i<str.l...

2019-06-01 11:10:53 117

原创 48、不用加减乘除做加法

位运算1、不考虑进位时,位运算由于0+1和1+0都为1,0+0和1+1都为0,所以相当于异或运算。2、进位只有1+1的情况有进位,所以计算进位相当于计算按位与。3、将进位与不进位的情况相加相当于重复步骤1,2。public class Solution { public int Add(int num1,int num2) { int sum=num1;...

2019-06-01 11:10:37 73

原创 47、求1+2+3+4+……+n

不让用乘除和循环,但是没有规定不让用pow。所以可以(pow(n,2)+n)>>1public class Solution { public int Sum_Solution(int n) { double s=(double)n; double t=(Math.pow(s,2.0)+s); return ((int)t)...

2019-06-01 11:10:25 504

空空如也

空空如也

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

TA关注的人

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