- 博客(57)
- 收藏
- 关注
原创 剑指offer:二叉搜索树的第k个节点
二叉搜索树概念:(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。举例中的二叉树实际结构:核心思想:中序遍历,也就是 左 根 右 ,二叉树变成了2,3,4,5,6,7,8这样的顺序。查找第k个元素即可。第一种办法:递归中序遍历+利用数组存储二叉树数据。再获取第k个元素。 static ArrayLi.
2020-11-09 23:42:57 261
原创 剑指offer:旋转数组的最小数字
1.没什么好说的直接排序,输出最小值就完了。暴力直接,有api不用是傻瓜。 public int minNumberInRotateArray(int[] array) { //直接排序 if (array.length == 0) return 0; Arrays.sort(array); return array[0]; }2.站在学习的角度上理解题意:非递减数组的一个旋转数组,作为参数。那么传入的参数格式要么是:1.
2020-10-29 19:31:15 206
原创 数据结构:堆——概念、代码实现
1.概念:二叉堆是经常被提到的堆, 堆满足:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树2.分类:堆具体分为大根堆和小根堆。大根堆的父节点一定是比子节点的value大的,小根堆的父节点一定是比子节点的value小的。父节点和子节点的关系,已知父节点为k,则左孩子为2k+1,右孩子为2k+2,且都应该小于等于总结点个数。根节点从0开始,因为底层是数组。已知子节点位置为k,则父节点位置为(k-1)/2,向下取整(以大根堆为例) 向下调整:整体思想: 从最后一个子树开始调整。
2020-10-22 16:52:24 269
原创 手撕排序算法和个人理解
排序作为最入门的算法,说简单也简单,但是初学者不好想象。下面就做一介绍。针对于排序算法,我主要关注的点是:1.代码实现(参杂一些个人的理解)2.时间,空间复杂度(概念就不介绍了)3.稳定性ps:稳定的排序,可以通过代码变成不稳定,不稳定的排序无法变成稳定。界定稳定有一个比较好的办法就是判断有没有跳跃式交换,如果有那么就是不稳定的。如果没有就是稳定的。(这是一个小点,后面会有介绍)1.直接插入排序思想:接牌思想,第一个数据默认有序,从第二个数据开始遍历。每次把插入的值放入到tmp中,从它的前一
2020-10-22 00:30:41 673
原创 JMM和JVM的区别
在面试的时候我经常被问到JVM内存模型,我一直以为JVM也就5大区域,线程共享的方法区(包含运行常量池),堆和线程私有的本地方法栈,和虚拟机栈还有程序计数器。当问道JMM我下意识觉得可能是在问JVM。其实不是,二者本来不是一个东西。JVM是java实现的虚拟计算机,(Java Virtual Machine),既然是虚拟实现的计算机,那么它也有对应的存储区,这就是刚才说的那些堆,栈等等。JMM是什么?JMM的主要目的是定义程序中各种变量的访问规则,变量包含实例字段和静态字段,但是不包括局部变量和方法参
2020-10-20 21:02:33 608
原创 java基础:内部类
内部类概念:定义在类的内部的类叫做内部类。内部类根据不同的定义方式:可以分为:1.静态内部类2.成员内部类3.局部内部类4.匿名内部类一、静态内部类概念:定义在类的内部的静态内部类。静态内部类可以访问外部类的静态成员属性和方法。在静态类内部也可以定义静态变量,方法,构造函数等。静态内部类通过 外部类名.静态内部类名 来new实例 进行调用。public class OUT { private static String className="我是类的静态成员属性";
2020-10-13 21:56:03 118
原创 HashTable、HashMap、CurrentHashMap的关系
在上一个博客中提到了hashmap,HashMap是基于哈希表实现的,内部通过链表或红黑树解决哈希冲突问题。容量不足时,会进行2的幂次方扩容,但是非常重要的一点就是HashMap并不是线程安全的,只能使用在单线程下,如果要使用在多线程下,就要采用jdk1.5引入的concurrent包下的concurrentHashMap。这篇博客主要就是介绍HashMap、HashTable 、ConcurrentHashMap的区别和联系。HashMap是继承自AbstractMap类,而HashTable是继承
2020-10-12 22:15:57 263
原创 java基础:集合框架以及背后的数据结构
集合框架以及对应的数据结构一、集合框架(集合类)概念二、集合类接口和类的总览三、List1.arraylist2.linkedlist3.vectorps:4.arraylist和linkedlist的区别四、Queue一、集合框架(集合类)概念java集合框架 Java collection framework也就是我们通常叫的集合类,又被称为容器container,定义在java.util包下的一组接口和类,就是api(应用程序接口)。它的作用是管理元素,也就是说通过这个集合类我们可以对元素
2020-10-11 22:02:00 361
原创 HTTP常见状态码小结
HTTP状态码是什么?当浏览器访问一个网页时,客户端得浏览器会向目标网页所在得服务器发出请求,当浏览器接收并显示网页前,服务器会返回一个包含HTTP状态码得信息头用来响应浏览器的请求。常见的状态码?1xx:信息,服务器收到请求但是需要请求者继续执行操作。2xx:成功,操作成功并被接收处理。3xx:重定向,需要进一步操作以完成请求.4xx:客户端错误,请求包含语法错误或无法完成请求。5xx:服务端错误,服务器在处理请求的过程中发生了错误。常用的HTTP状态码表一、100,继续,客户端应继续
2020-09-07 23:52:25 175
原创 网络通信的概念以及浅谈套接字socket的作用?
网络通信是指两个主机间的通信,但是这样并不具体,准确来说来说真正进行通信的是主机中的进程。也就是说进行通信的只一台主机上的进程和另一个主机上的进程进行数据交换。我们常说TCP/IP,那么它到底是什么?...
2020-09-06 21:07:57 1591
原创 java实操项目:悦读FM总结
悦读FM——项目总结项目概述项目背景项目应用到的技术项目功能项目小亮点项目总结和展望开源代码项目概述项目背景悦读FM这个项目最主要的目的还是练习自己的技术,因为突然看到了别人的毕业论文是一个本地播放音频的题目,于是想了想,似乎在数据库存储音频视频这类东西时,自己没有关注过。同时也为了弥补在上个易班项目中没有联系过前端代码,自己写了写简单的HTML表单代码,同时学到了一些项目应用到的技术项目功能项目小亮点项目总结和展望开源代码...
2020-09-01 00:59:17 777
原创 java:JDBC链接数据库步骤
声明数据库驱动,数据源的url,用于登录数据库的账户和密码(将其他功能封装成方法的时候方便使用)String driver = “数据库驱动名称”;String url = “数据库连接地址”String user = “用来连接数据库的用户名”;String pwd = “用来连接数据库的密码”;加载数据库驱动Class.forName(driver);根据url创建数据库连接对象ConnectionConnection con = DriverManage.getConnection(u
2020-08-24 16:36:43 155
原创 stactic关键字的作用
1.static是什么?static作为java中的修饰符,可修饰成员属性,成员方法,内部类,代码块。2.static有什么用?java是面向对象的语言,说白了就是我们只关心对象,而不去关心它内部具体是如何实现的。我们通常使用 对象. 来获取这个对象所具有的一些属性或者方法,但是前提是我们必须有对象(扎心了)。那么如果没有对象怎么去调用这些呢,这就是static的作用。static可以让我们没有创建对象的情况下来进行调用。也就是说static修饰的东西不依赖于对象,根据类名就可以去访问。
2020-08-20 17:26:02 950
原创 “易班”学生管理平台小项目 万字总结 泪目!!!
"易班"——项目总结1. 项目概述2.项目背景3. 项目应用到的技术1.Maven项目功能项目中遇到的难点展望链接以及开源代码1. 项目概述"易班"项目是基于Java语言的一个Web项目,是一个学生和班级信息管理平台,它可以对学生或者班级信息进行增加,删除,改正,查询的一个信息平台,通过网页访问管理人员可以了解到实时的学生信息和班级信息,最直接的适用场景是适用于各个学校,对字段进行修改后也可以适用于公司,组织等等一切需要对人力资源信息进行管理的场景下,因此这个项目具有相当的实用性和必要性。2.项目背景
2020-08-13 16:18:45 2094
原创 Linux系统和windows系统得区别?
一、特bai点不同Windows 系统直观、高效的面向对象du的图形用户zhi界dao面,易学易用,Windows 用户界面和开发环境都是面向对象的,这种操作方式模拟了现实世界的行为,易于理解、学习和使用;Linux 适用性强,微型计算机的 Linux 系统也能够移植到大型计算机中运行。二、软件获取的途径不一样windows 系统每一种特定功能可能都需要商业软件的支持,需要购买相应的授权;linux 系统大部分软件都可以自由获取,同样功能的软件选择较少。三、源代码公布不一样linux 系统源代码完
2020-07-25 16:14:39 293
原创 java乒乓球筐——牛客
nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?链接:https://www.nowcoder.com/questionTerminal/bb4f1a23dbb84fd7b77be1fbe9eaaf32?pos=100&orderByHotValue=1来源:牛客网输入描述:输入有多组数据。每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相
2020-07-22 23:51:00 317
原创 OSI七层模型、TCP/IP五层(或四层)模型
要说OSI七层模型和TCP/IP五层(或四层)模型,我们先做问题得拆解,1.什么 是OSI?2.七层模型是那些?如何划分?有那些功能?3.有了OSI七层模型,我们为什么还要引入TCP/IP层模型以及他们又是怎么划分的?1.什么是OSI?开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),它是由ISO(国际标准化组织)制定的一种概念模型,由国际标准化组织提出,一个试图使各种计算机
2020-07-22 14:22:16 548
原创 JAVA基础——单例模式
1.介绍单例模式之前我们先看什么是模式?所谓模式就是一种规定好的范例,用白话讲就是套路,在java中遵循某个模式会让你的代码更加规范避免一些自己没有考虑到的错误。2.再说什么是单例模式?单例模式(singleton pattern)是java一种较为简单的设计模式,这中类的设计模式属于创建模式,它提供了一种创建对象的最佳方式,单例模式是指一个单一的类,该类负责自己创建对象,并确保只能创建出一个对象,并对外提供访问这个唯一的对象的方法。外部可以直接访问,而不需要再构造对象。注意:1.单例类只能由一
2020-06-23 18:27:59 166
原创 Thread线程安全
要理解线程安全我们首先举一个例子:问题:启动两个线程,同时操作一个变量 v = 0一个线程对该变量执行 N 次 v++另一个线程对该变量执行 N 次 v–问,当两个线程都执行结束时,v 的值是多少?结论:理论上我们的期望值应该是0,但是实际上是一个随机值(也有可能出现0),并且当N越大时出现随机值的概率越高。通过这个例子我们就可以简单的给线程安全下一个定义,程序运行的结果假如我们100%符合我们的预期,不会出现有时正确有时错误,就是线程安全。再回到我们刚才那个例子,为什么会
2020-06-19 14:25:58 264
原创 Thread线程状态转换
首先我们想要知道什么是线程的状态:简而言之就是目前线程所处的一种情况,因为我们要管理线程,所以要先知道线程处在什么情况下。类似于进程。public class AllThreadState { public static void main(String[] args) { Thread.State[] values =Thread.State.values();//枚举所有的线程状态 for (Thread.State s: values) {//打印
2020-06-19 10:53:12 253
原创 java 每日两题605:两个栈实现队列
题目:用两个栈模拟一个队列。实现push,pop方法。分析:栈的特点:先进后出队列的特点:先进先出,后进后出,队尾进,队头出。图示:入队:默认储存在stack1中.出队:import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integ
2020-06-05 18:05:08 144
原创 java 每日两题605:神奇口袋
1.有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。分析:把输入的每一个数储存在数组中,难点在于如何判断元素之和等于40,元素个数不确定的问题,所以不能采用普通的遍历数组操作。使用深度搜索思想。深度优先搜索的概念:采用搜索
2020-06-05 17:48:27 260
原创 JAVA 判断一个树是不是完全二叉树
public boolean isCompleteTree(Node root){ if (root==null){ return true; } Queue<Node> list=new LinkedList<>(); list.offer(root);//如果根节点不为空,放入队列 while (!list.isEmpty()){ Node cur=l
2020-05-21 22:17:36 431
原创 JAVA前中,序遍历 迭代法
public class Ergodic { //非递归前序遍历,迭代法 public List<Integer> preorderTraversal(Node root) { List<Integer> list=new LinkedList<>(); if (root==null){ return list; } Node cur=root; Sta
2020-05-21 22:16:32 335
原创 JAVA LCA问题 寻找最近公共祖先(递归)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。public Node lowestCommonAncestor(Node root, Node p, Node q) {//给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 if (root == null) {//1.如果root为
2020-05-21 22:15:16 540
原创 牛客题目:根据一个前序遍历的得到的字符串来构建二叉树例如ABC##DE#G##F### #代表的是null
题目://根据一个前序遍历的得到的字符串来构建二叉树例如 ABC##DE#G##F### #代表的是null;int i=0;//定义在类外 public Node buildTree(String str){//根据一个前序遍历的得到的字符串来构建二叉树例如ABC##DE#G##F### #代表的是null; Node root=null; if (str.charAt(i)!='#'){ ///子问题 每一个不为#的节点都是一个根节点
2020-05-21 22:11:42 1102
原创 JAVA后序迭代遍历二叉树
public List<Integer> postorderTraversal(Node root) { List <Integer> list=new LinkedList<>(); if (root==null){ return list; } Stack <Node> stack=new Stack<>(); //用栈来辅助实现 Node
2020-05-21 22:10:00 191
原创 JAVA实现一个大根堆
public class TestHeap { public int[] elem; public int usedSize; public TestHeap() { this.elem = new int[10]; } /** * * @param root 每棵子树的开始位置 * @param len 结束位置 */
2020-05-21 22:05:20 296
原创 JAVA 实现循环队列
public class MyCircularQueue { private int[]arr; private int front=0;//循环队列头部 private int rear=0;//循环队列尾部 /** Initialize your data structure here. Set the size of the queue to be k. */ public MyCircularQueue(int k) { this.arr.
2020-05-14 15:39:24 232
原创 JAVA 实现一个最小栈
定于:在常数时间内检索到最小元素的栈import java.util.Stack;public class MinStack { Stack<Integer> minStack=new Stack<>();//最小栈 Stack<Integer> helpStack=new Stack<>();//辅助栈 public MinStack() { this.minStack=new Stack<>();/
2020-05-14 15:06:21 212
原创 JAVA 括号匹配问题 转自力扣
public boolean isValid(String s) { Stack<Character> stack=new Stack<>(); for (int i = 0; i <s.length() ; i++) { char ch=s.charAt(i); if (ch=='{'||ch=='['||ch=='('){ stack.push(ch); .
2020-05-14 11:46:12 255
原创 JAVA List和泛型的初步运用小程序:纸牌游戏
主要运用:泛型,实现List接口的Arrylist顺序表,类的定义和使用class Card{ public int rank; public String suit; public Card(int rank, String suit) { this.rank = rank; this.suit = suit; } @Override public String toString() { return S
2020-05-13 17:38:07 213
原创 java自定义异常,实现用户登录程序
class UserError extends Exception{ public UserError(String message) { super(message); }}class PasswordError extends Exception{ public PasswordError(String message) { super(message); }}public class TestDemo { private
2020-05-11 17:57:31 464
原创 java牛客题:输入一个字符串,求出该字符串包含的字符集合
输入描述:每组数据输入一个字符串,字符串长度不超过100,且只包含字母,没有空串,区分大小写。输出描述:每组数据一行按字符串原有的字符顺序,输出字符集合,即重复出现并且靠后的字母不输出。实例 : abcdadc输出:adcdpublic class TestDemo { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while (sc.hasNext(
2020-05-11 17:55:27 1388
原创 String内容不可变?教你一招改变字符串内容。
(标题很爆炸?明天到uc上班?哈哈,只是今天学到了一个很有意思的东西拿出来写写)ne内容:我们都知道java中字符串是一种不可变对象,它的内容是不可以改变的,因为它的底层源码没有set方法,并且是基于char[ ]也就是字符数组实现的。数组的访问权限为private,final的意味着它不可以被改变,那么有什么方法可以让他改变呢?先看看底层源码节选:可惜清楚的看到value[]数组的属性。...
2020-05-07 21:31:59 680
原创 JAVA实现图书管理系统
利用:类,抽象类,封装,继承,多态,接口等进行的一个简单的代码练习。要实现的功能:1、简单的登录2、管理端整理书籍(该功能为可扩展功能)查阅书籍增加书籍删除书籍打印书籍列表退出3、用户端查询书籍借阅书籍归还书籍退出界面:包和类的创建:package book;public class Book {// 创建了一个Book类 private Str...
2020-05-04 00:43:50 724
原创 java实现Cloneable接口
class Person implements Cloneable{ //实现clone接口 深拷贝 //**** 简单类型就是深拷贝,引用类型是浅拷贝 java是面向对象的基本都是浅拷贝 //Cloneable是一个空接口, 也叫做标记接口,如果一个类实现了这个接口,那么就标记这个类,意味着它可以进行克隆 public int age; @Overr...
2020-05-02 22:17:01 787
原创 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
要求:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。class Solution { public int[] singleNumbers(int[] nums) { int sum=0; for ( int num:nums) { ...
2020-04-30 16:11:33 349 1
原创 JAVA无头双向单链表的实现
class Node{ public int data; public Node next; public Node prev; public Node(int data){ this.data=data; this.next=null; this.prev=null; }}public class D...
2020-04-27 23:38:03 168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人