自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 二叉树题目

文章目录判断二叉树是否对称二叉树中是否存在节点和为指定值的路径二叉树根节点到叶子节点的所有路径和在二叉树中找到两个节点的最近公共祖先判断二叉树是否对称public class Solution { /** * * @param root TreeNode类 * @return bool布尔型 */ public boolean isSymmetric (TreeNode root) { // write code here

2021-08-22 23:52:44 154

原创 HashTable 和 ConcurrentHashMap

HashTable 和 ConcurrentHashMap 的区别HashMap:不是线程安全的,不能应用于多线程的场景下。HashTable:是一个线程安全的类,使用synchronized来锁住整张Hash表来实现线程安全,坏处就是锁冲突概率非常高。HashTable的扩容当某个线程正好触发扩容,这个线程就要负责娲女恒整个扩容过程。ConcurrentHashMap:并不是针对整个对象加一把锁,而是分成了很多把锁。每个链表/红黑树分配一把锁,只有当两个线程恰好修改的是同一个链表/红黑树的时候

2021-08-17 16:44:24 133

原创 数组拷贝(浅拷贝和深拷贝)

文章目录数组拷贝的 4 种方法for循环拷贝Arrays.copyOfSystem.arraycopyclone方法浅拷贝和深拷贝数组拷贝的 4 种方法for循环拷贝public static void main(String[] args){ int[] array = {1,2,3,4,5}; int[] newArray = new int[array.length]; for(int i = 0; i < array.length; i++){ newArray[i] = ar

2021-08-16 21:07:26 711

原创 方法的使用

文章目录方法的使用方法的基本用法方法的重载方法递归方法的使用方法就是一个代码片段,类似于C语言的函数。能够模块化的组织代码,做到代码可以重复使用,也可以直接调用现有的方法。方法的基本用法1.方法的定义:方法定义时,参数可以没有,每个参数要定义类型;方法定义时,返回值可以没有,返回值类型要写成void;方法定义时的参数称为形参,方法调用时的参数称为实参。2.实参和形参的关系:对于基础类型,形参相当于实参的拷贝,即传值调用。使用引用类型的参数,彻底改变实参的值。方法的重载重载的规则:针对

2021-08-13 01:09:47 99

原创 位运算&移位运算

文章目录二进制1的个数二进制序列找出出现一次的数字二进制1的个数描述:求一个整数,在内存中存储时,二进制1的个数。public void num(int n){ int count = 0; for(int i = 0; i < 32; i++){ if(((n >>> i) & 1) != 0){ count++; } } System.out.println(count);}二进制序列描述:获取一个数二进制序列中所有的奇数位和偶数位,分

2021-08-12 23:54:49 96

原创 JDK、JRE 和 JVM

JDK、JRE 和 JVMJDK(Java Development Kit):java 开发工具包。包括了java运行环境jre、一堆java工具(javac/java/jdb等)、java基础的类库。JRE(Java Runtime Environment): java 运行时环境。主要包含两个部分:jvm 的标准实现和 java 的一些基本类库。通过 jre,java 的开发者才能将自己开发的程序发布到用户手中,让用户使用。JVM(Java Virtual Machine):java 虚拟机。ja

2021-08-12 19:13:50 68

原创 NO.6 剑指Offer

剑指Offer第六天复杂链表的复制在这里使用哈希表来保存新旧节点的对应关系,然后在哈希表中更新next和random字段public class Solution { public RandomListNode Clone(RandomListNode pHead) { HashMap<RandomListNode,RandomListNode> map = new HashMap<>(); RandomListNode cur =

2021-08-07 23:02:12 60

原创 进程和线程的区别

进程和线程进程:运行一个程序,操作系统就会创建一个对应的进程 (操作系统支持多进程、多任务并发执行)。线程:一个 “轻量级进程” (进程要管理资源,创建/销毁进程就需要申请/释放相应的资源,尤其是内存资源) 同一个进程的多个线程之间共享内存资源,更高效、更轻量的完成并发编程。创建线程比创建进程的开销更小。进程和线程的区别:进程包含线程进程之间相互隔离,进程和进程之间有各自的资源,不会影响到其他的进程同一个进程的线程之间,共享了一些资源,尤其是内存资源。所以线程和线程之间会相互影响,一个线程出问

2021-08-06 23:48:51 82

原创 线程中start方法和run方法的区别

线程中start方法和run方法的区别启动线程必须要调用 start 方法,使用start才有新的执行流class MyThread extends Thread{ @Override public void run() { System.out.println("hello"); }}public class ThreadDemo { public static void main(String[] args) { MyThread

2021-08-06 23:33:15 1377

原创 NO.5 剑指Offer

剑指Offer第5天刷题今天依旧是链表链表中环的入口节点1.判断这个链表有没有环:定义两个引用 fast 和 slow,让它们从这个链表的头结点开始遍历,fast 一次走两步,slow 一次走一步,如果这个链表有环,那么 fast 和 slow 势必会相遇。2.找到这个链表中环的入口节点:如果这个链表有环,fast 和 slow 在C点相遇,A、B之间的距离是x,B、C之间的距离是y,环的周长为c,那么 fast 走过的路径为 x+c+c-y,slow 走过的路径为 x+c-y。根据数学的知识

2021-08-06 22:43:28 63

原创 NO.4 剑指Offer

剑指Offer第4天刷题今天开始复习链表:翻转链表需要保留一个节点的前驱和后继,用cur来遍历节点,head就是它的前驱,curNext是它的后继public class Solution { public ListNode ReverseList(ListNode head) { if(head == null) return null; ListNode cur = head; ListNode curNext = cur.next

2021-08-05 23:52:41 101

原创 NO.3 剑指Offer

剑指Offer第三天刷题跳台阶类似昨天的斐波那契数列,今天用递归写一下:public class Solution { public int jumpFloor(int target) { if(target <= 2){ return target; } return jumpFloor(target-1) + jumpFloor(target-2); }}跳台阶扩展问题变态青蛙跳台阶问题:(动

2021-08-04 23:03:00 63

原创 NO.2剑指Offer

文章目录剑指Offer第二天刷题用两个栈实现队列旋转数组的最小数字斐波那契数列剑指Offer第二天刷题用两个栈实现队列描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:[“PSH1”,“PSH2”,“POP”,“POP”]返回:1,2解析:“PSH1”:代表将1插入队列尾部“PSH2”:代表将2插入队列尾部"POP“:代表删除一个元素,先进先出=

2021-08-04 00:15:19 125

原创 NO.1剑指Offer

文章目录剑指Offer第一天刷题二维数组中的查找替换空格从尾到头打印链表剑指Offer第一天刷题二维数组中的查找描述:在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回

2021-08-02 19:48:02 79

原创 排序

基于比较的排序插入排序选择排序交换排序归并排序

2021-05-14 23:00:15 65

原创 归并排序

归并排序采用分治法,将已有序的子序列合并,得到完全有序的序列。即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 //合并两个有序数组 public static void merge(int[] array,int low,int mid,int high){ int[] tmp = new int[high-low+1]; int k = 0;//数组下标 int s1 = low;

2021-05-14 22:53:34 78

原创 交换排序

交换排序冒泡排序在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组有序public static void bubbleSort(int[] array){ for (int i = 0; i < array.length-1; i++) {//i代表趟数 for (int j = 0; j < array.length-1-i; j++) { if (array[j] > ar

2021-05-14 20:05:33 70

原创 选择排序

选择排序直接选择排序每一次从无序区间内选出最小(或最大)的元素放在无序区间的最前(或最后),直到待排序数组全部排完。public static void selectSort(int[] array){ for (int i = 0; i < array.length; i++) { for (int j = i+1; j < array.length; j++) { if (array[i] > array[j

2021-05-14 18:08:12 69

原创 插入排序

插入排序直接插入排序先将 i 放在数组1下标,j 在数组的0下标,遍历数组,定义一个tmp保存i下标的值循环比较tmp的大小和 j 下标的值,把大的值放在后面,j - -当 j 遍历完数组或者不满足 j 下标值大于tmp时,将tmp赋给j+1public static void insertSort(int[] array){ for (int i = 1; i < array.length; i++) { int tmp = array[i];

2021-05-14 17:49:01 80

原创 比较两个二叉树是否相同

比较两个二叉树是否相同思路:两个二叉树不能其中一个为空两个二叉树的根必须相同两个二叉树对应的每一个节点的结构相同,对应的值也相同例如:每个节点值相等,结构相同 true每个节点值相等,但结构不相同 false两个二叉树结构相同但对应节点的值不相等 false代码示例: public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null && q==null) return

2021-05-02 20:17:46 1318

原创 二叉树的基本操作

二叉树的基本操作定义一个Node类,来表示二叉树中的一个节点class Node{ public char val; public Node left; public Node right; public Node(char val){ this.val = val; }}定义一个BinaryTree类,在类中实现以下函数public class BinaryTree { public Node root;//根节点}二叉树的

2021-05-02 20:03:51 50

原创 创建一个图书管理系统

创建一个图书管理系统文章目录创建一个图书管理系统核心需求类的设计创建图书相关的类创建操作相关的类实现每一个Operation创建用户相关的类整合总结核心需求登录管理端查找图书增加图书删除图书打印图书退出系统用户端查找图书借阅图书归还图书退出系统类的设计创建图书相关的类建一个包package bookpackage book;创建一个Book类 新建一本书public class Book { private String name;//书名

2021-04-23 23:39:59 1217 2

原创 Java实现一个双向链表

Java实现一个双向链表定义一个ListNode类,来定义一个双向链表的节点class ListNode { public int val; public ListNode prev;//节点的前驱 public ListNode next; public ListNode(int val) { this.val = val; }}定义一个MyDoubleList类,在类中实现以下函数public class MyDoubleList {

2021-04-22 11:06:09 349 2

原创 Java实现一个链表

Java实现一个链表概念链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序来实现的。物理上不一定连续,逻辑上一定是连续的。链表的8种结构单向、双向带头、不带头循环、非循环无头单向非循环链表的实现定义一个Node类,来定义链表中的一个节点class Node { public int val; public Node next; public Node(int val){ this.val = val;

2021-04-20 21:43:42 299

原创 Java实现一个顺序表

实现一个顺序表概念顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储。在数组上完成数据的增删减改。顺序表的底层是一个数组!接口实现定义一个MyArrayList类,在类中实现以下函数public class MyArrayList { }数组的定义 public int[] elem;//定义一个整形数组 public int usize;//usize表示数组的长度 public MyArrayList(){ th

2021-04-13 21:52:04 137

原创 Java之逻辑运算符

Java之逻辑运算符有3个逻辑运算符,分别是逻辑与、逻辑或和逻辑非。逻辑运算符的操作数和返回值都是boolean。逻辑与&&当两个操作数都为true,则结果为true,只要有一个为false,则结果为false。例如:int a = 3;int b = 4;int c = 5;System.out .println( a > b && a < c );因为a>b为false,则结果为false。逻辑或||当两个操作数都为false,

2021-04-02 23:53:38 531

空空如也

空空如也

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

TA关注的人

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