- 博客(101)
- 收藏
- 关注
原创 Java二叉树常见题型
二叉树常见面试题(Leetcode)基本操作前序遍历中序遍历后序遍历求节点个数求叶子节点个数求第K层节点个数层序遍历平衡二叉树合并二叉树对称二叉树翻转二叉树二叉树的镜像二叉树的深度二叉树的最近公共祖先另一个树的子树相同的树递增顺序搜索树基本操作前序遍历题目链接class Solution { List<Integer> list=new ArrayList<>(); public List<Integer> preorderTraversal(Tr
2021-06-07 17:40:48
427
1
原创 逆波兰表达式
表达式求值中缀表达式:前缀表达式:后缀表达式:中缀表达式转后缀表达式:中缀表达式:我们平时看到的运算式就是中缀表达式 如:3+4前缀表达式:将运算符写在操作数之前 如: + 3 4后缀表达式:将运算符写在操作数之后 如: 3 4 +中缀表达式转后缀表达式:如:先根据加减乘除的顺序,依次给表达式加括号如下:然后从右往左依次将运算符移除对应的括号外移完后,删除所有括号得到逆波兰表达式(后缀表达式)逆波兰表达式求值题目链接class Solution {
2021-06-04 16:19:33
228
1
原创 多线程高阶一——锁策略
ThreadLocal缺点:1.不可继承性(子线程不能读取父线程的变量)2.脏数据(ThreadPool线程复用相关的额静态变量)3.内存溢出ThreadPool(长生命周期)->Thread->ThreadLocal ->map->Entry-> key,value(强引用)常见锁策略乐观锁:它认为一般情况下不会发生冲突,所以只有在进行数据更新的时候,才会检测并发冲突,如果没有冲突则执行修改,如果有冲突则返回失败。CASV(内存值)A(旧值)B(新值)
2021-06-03 17:01:09
157
原创 内存溢出问题+单例模式+自定义阻塞队列
ThreadLocal 使用:1.set:将私有变量设置到线程2.get:从线程中获取ThreadLocal3.remove:将线程中的ThreadLocal移除。4.initialValue:初始化5.withInitialValue:初始化(lambda表达式)使用场景:1.解决线程安全问题2.实现线程级别的数据传递缺点:1.不能进行父子线程之间的数据传递。2.脏数据。ThreadLocal+线程池 (复用)3.内存溢出内存溢出问题设置最大运行内存为5Mpackage
2021-06-03 14:22:21
239
1
原创 ThreadLocal
ThreadLocal:线程级别的私有变量ThreadLocal使用:1.set(T):将变量存放在线程中。2.get(T):从线程中取得私有变量3.remove():从线程中移除私有变量。
2021-06-03 13:03:42
647
原创 BST二叉搜索树
二叉搜索树的增删查改class BinarySearchTree{ static class BSnode{ public int val; public BSnode left; public BSnode right; public BSnode(int val){ this.val=val; } BSnode root=null; //查找 public boolean search(int val){ if(root==null)return fals
2021-05-24 20:41:52
119
1
原创 线程2——死锁,线程池,拒绝策略
死锁:在多线程编程中(两个或两个以上的线程),因为资源抢占而造成线程无线等待的问题线程和锁的关系:一对多,一个线程可以拥有多把锁,而一把锁只能被一个线程拥有死锁代码在这里插入代码片死锁造成的四个条件(同时满足):1.互斥条件:一个资源只能被一个线程持有,之后不能被其他线程拥有2.请求拥有条件:一个线程持有了一个资源之后,又试图请求另一个资源3.不可剥夺条件:一个资源被一个线程拥有之后,如果这个线程不释放此资源,那么其他线程不能强制获取此资源4.环路等待:多个线程在获取资源时,形成了一个环
2021-05-12 15:53:43
327
原创 Java不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。做这个题的前提要明白两个思想:①:二进制位相异或的结果,是两数相加的结果(不考虑进位)②:二进制位相与后,左移一位的结果是两数相加进位后的结果(只考虑进位)得出结论:两个数相加,如果不需要进位的话,相异或的结果就是相加的结果举例1:1+2异或相与后左移一位举例2:异或继续循环这个过程直到B==0了停止所以代码就很容易实现了public class Solution { p
2021-05-03 18:31:22
212
3
原创 进制转换
题目描述给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数示例1输入7,2输出“111”思路:抓住进制转换之间的规律,本题迎刃而解代码实现ort java.util.*;public class Solution { /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ public S
2021-05-02 21:39:57
131
原创 字符串中找出连续最长的数字串
题目描述读入一个字符串str,输出字符串str中的连续最长的数字串输入描述:1个测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述:在一行内输出str中里连续最长的数字串。示例1输入abcd12345ed125ss123456789输出123456789思路代码展示import java.util.*;public class Main{ public static void main(String[] args){ S
2021-05-02 20:22:07
457
1
原创 线程
线程构造方法:设置线程名线程的任务设置线程分组线程的常用属性:ID,Name…状态优先级(1-10 默认5)守护线程(后台线程)守护线程注意:1.在守护线程里面创建的线程,默认是守护线程2.守护线程状态的设置必须放在线程启动之前start和run方法的区别run属于普通方法,start是启动线程的方法run方法可以执行多次,start方法只能执行一次线程中断:使用全局自定义的变量来终止线程-------------------->收到终止指令后,会执行完当前
2021-04-30 17:55:50
603
5
原创 线程终止方式
终止线程在java里面,终止线程的方式有三种①使用全局自定义的变量来终止线程②使用线程提供的终止方法 interrupt 来终止线程③使用线程提供的方法 stop 来终止线程(弃用,终止之后,未释放资源,有安全隐患)这里直接结合代码演示第一种public class ThreadDemo6 { public static boolean flag=false; public static void main(String[] args) throws Inte
2021-04-28 19:21:15
365
1
原创 线程中start()方法和run()方法的区别
线程中start()方法和run()方法的区别Java中的线程是通过Java.lang.Thread实现的,可以通过实例化Thread一个对象来创建一个线程,然后调用start()启动,但是Thread的一个特定的方法run()也可以启动线程,这两个方法有什么区别呢?线程状态在Java当中,线程通常有五种状态:创建、运行、阻塞、等待、终止NEW------------------->新建状态,没有调用start()之前的状态RUNNABLE---------->运行状态,(runni
2021-04-28 00:00:35
1984
16
原创 Java排序子序列
排序子序列排序子序列题目连接做题思路根据题意的非递增序列和非递减序列,可以分为这两个序列题目给的例子也代表了所有的情况①arr[i] > arr[i+1]②arr[i] < arr[i+1]③arr[i] = arr[i+1]但有一个情况需要注意:当 i 遍历到结尾时,i+1越界了这时我们可以在new数组的时候,给数组长度+1,就完美的解决了这个问题代码实现import java.util.*;public class Main{ public st
2021-04-27 18:35:00
669
7
原创 有三个线程,分别只能打印A,B和C,要求按顺序打印ABC,打印10次
/** * 三个线程 * 打印十行ABC */public class ThreadDemo1 {public static void main(String[] args) throws InterruptedException { show(); } private static void show() throws InterruptedException { for(int i=0;i<10;i++) { .
2021-04-27 16:29:01
1163
3
原创 编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天。
题目描述输入某年某月某日,判断这一天是这一年的第几天?实现思路通过Scanner依次接收用户输入的年,月,日只要计算两部分天数就行:1.用户输入的月份之前所有月份天数累加。2.输入月份中的天数代码实现import java.util.*;public class Main{ public static void main(String [] args){ Scanner sc=new Scanner(System.in); int year=s
2021-04-26 20:39:13
1451
1
原创 用两个线程打印AABBCCDD
经典例题用两个线程打印AABBCCDDpublic class ThreadDemo3 { public static void main(String[] args) { show(); } private static void show() { String str="ABCD"; Thread t1=new Thread(new Runnable() { @Override
2021-04-26 19:22:35
172
原创 初始多线程
概念进程:系统分配资源的最小单位线程:系统调度资源的最小单位,被包含在进程之中线程是进程执行的最小单位,是进程执行的实际单位一个进程中最少包含一个线程,线程必须衣服进程当中。进程不可用共享资源;而线程可以线程可以共享的资源:打开的文件内存(对象)线程不可共享的资源上下文记账信息状态线程栈信息优先级注意事项:线程的数量不是越多越好,当线程的数量达到某个合适的值是最好的,如果有太多的线程,会出现线程之间的争夺和CPU的过度调度问题,而CPU
2021-04-25 10:39:49
114
原创 初识操作系统
操作系统1.硬件2.软件:内核(OS)硬件组成:冯诺依曼体系结构/普林斯顿体系结构输入单元:包括键盘,鼠标,扫描仪,写板等中央处理器(CPU):含有运算器和控制器等输出单元:显示器,打印机等注意:CPU和输入设备或输出设备之间不能直接交互,必须依靠中间的存储部分(内存)。内存 VS 硬盘1.内存的读写速度远远大于磁盘,内存读写速度纳秒(ns),硬盘读写速度微妙(ms)2.内存价格远大于磁盘。3.内存中的数据不能持久化(电脑重启,数据消失),磁盘2.软件内核OS内核(进
2021-04-25 10:01:50
171
原创 验证哥德巴赫猜想:任何一个偶数(大于2)都可以由两个素数组成,要求输出两个素数差值最小的素数对
import java.util.*;import java.lang.*;public class Main{ public static void main(String[] args){ Scanner scanner =new Scanner(System.in); while(scanner.hasNext()){ int n=scanner.nextInt(); int a=0; .
2021-04-24 16:51:32
3595
原创 求一个byte数字对应的二进制数字中1的最大连续数
代码实现import java.util.*;public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ int n=scanner.nextInt(); int max=0; while(n>0).
2021-04-23 15:08:18
195
原创 最近公共祖先LCA问题
题目描述给定两个int a,b。给定节点编号,请返回a和b的最近公共祖先的编号。思路:利用父子节点之间的关系 **root=child/2;**让a,b之间的较大数一直除2,同时让a,b往上走,直到a==b,就找到了公共祖先代码实现import java.util.*;public class LCA { public int getLCA(int a, int b) { // write code here while(a!=b){
2021-04-23 15:04:15
159
原创 机器人走方格
题目描述有一个X*Y的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角,设计一个算法,机器人有多少种走法。思路:不难看出其中的关系,走到右下角的方法数等于到上面格子的方法数加上到左边格子的方法数类似杨辉三角代码实现import java.util.*;public class Robot { public int countWays(int x, int y) { // write code here
2021-04-21 20:14:49
132
原创 最少需要多少步可以变为斐波那契数
题目描述给你一个N,想让其变成一个Ficonacci数,每一步可以进行+1,-1操作,求最少需要多少步可以变为Ficonacci数思路:如果斐波那契数列中的一个数比当前数要大,则开始计算数列中的当前数和前一个数,哪一个数更近, 则算出步数。代码实现import java.util.*;public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.i
2021-04-21 19:59:52
558
原创 输入有一个正整数n,求n!末尾有多少个0?
题目描述输入有一个正整数n,求n!末尾有多少个0?比如:n=10;n!=3628800,所以答案为2思路:末尾0的个数实际上就是2*5的个数,2肯定比5多,所以现在就统计5的个数代码实现public static void main(String[] args) { System.out.print("->"); Scanner sc = new Scanner(System.in); int n = sc.nextInt();
2021-04-21 14:41:34
1567
原创 输入一个整数,将这个整数以字符串形式逆序输出
题目描述输入一个整数,将这个整数以字符串的形式逆序输出程序不考虑负数的情况,若数字含0,则逆序形式也含有0,import java.util.*;public class Main{ public static void main(String[] args) { System.out.println("->"); Scanner sc = new Scanner(System.in); String str = sc.nextLine
2021-04-21 13:58:27
1603
原创 传输层、网络层复习+数据链路层
传输层应用层:与程序相关的一层端口号:知名端口号 0-1023动态端口号 1024-65535例:FTP:21SSH:22HTTP:80HTTPS:443DNS:53MYSQL:3306Tomcat:8080UDP:无连接,不可靠,面向数据报。UDP理论长度:64KB当UDP大于64KB会怎样?1,不处理,把它交给下层(网络层)处理,存在丢包的风险2,在应用层,让程序去处理UDP大包,把大包分成多个子包。UDP使用场景:DNS(域名解析服务)。TCP八大特性:
2021-04-20 22:41:06
234
原创 每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置
换浏览器了 ????代码简单易懂import java.util.*;public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ int n=scanner.nextInt(); if(n>1000){
2021-04-19 21:47:20
269
原创 给定一个不含重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有位置相应的信息
这里浏览器调了护眼,看起来有点黄 ????代码简单易懂import java.util.*;import java.lang.*;public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ int n=scanner.nextInt();
2021-04-19 17:32:15
701
1
原创 给定一个数组arr,其中只有两个数字出现了奇数次,其他数字都出现了偶数次,按照从小到大的顺序输出这两个数字
浏览器调了暖色,看起来有点黄 ????代码简单易懂import java.util.*;public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ int n=scanner.nextInt(); int[] arr=new
2021-04-19 17:29:38
780
原创 自定义HTTP服务器
自定义HTTP服务器关键:遵循HTTP协议HTTP请求:首行: [方法] + [url] + [版本]Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个ContentLength属性来标识Body的长度;HTTP响应首行: [版本号] + [状态码] + [状态码解释]Header: 请求的属性, 冒号分割的键值对;
2021-04-19 09:44:31
388
原创 输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数
import java.util.*;import java.lang.*;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); String A=sc.nextLine(); String B=sc.nextLine(); int count=0; //插入到开头 .
2021-04-16 20:28:54
280
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人