- 博客(27)
- 收藏
- 关注
原创 6.1 理解树的结构
注意:本关讲义我们主要看原理,不写可执行代码,因此我们只用伪码,不提供各种语言的定义。int val;这里本质上就是有两个引用,分别指向两个位置,为了便于理解,我们分别命名为左孩子和右孩子。如果是N叉树该如何定义呢?int val;那能否使用数组来存储二叉树呢?其实就是用数组来存储二叉树,顺序存储的方式如图:用数组来存储二叉树如何遍历的呢?如果父节点的数组下标是i,那么它的左孩子就是i*2+1,右孩子时i*2+2。但是用链式表示的二叉树,更有利于我们理解,所以一般我们都是用链式存储二叉树。
2023-11-22 10:35:43 122
原创 5.2 队栈和Hash的经典算法题
这个真不多,不过假如告诉你原始数组是有序的,那可以进一步优化,仍然采用两层循环的方式,外层任然是一个遍历,而内层循环可以换成二分,这样复杂度就从O(n^2)降到O(nlogn)。两个栈将底部拼接到一起就能实现队列的效果,通过队列也能实现栈的功能。,但是这样的问题是无法消除重复结果,例如如果输入[-1,0,1,2,-1,-4],返回的结果是[[-1,1,0],[-1,-1,2],[0,1,-1],[0,-1,1],[1,-1,0],[2,-1,-1]],如果我们再增加一个去重方法,将直接导致执行超时。
2023-09-15 09:30:38 234
原创 5.1 队列和Hash的特征
HashMap的实现原理是先要找到要存放数组的下标,如果是空的就存进去,如果不是空的就判断key值是否一样,如果一样就替换,如果不一样就以链表的形式存在链表中(从JDK8开始,根据元素数量选择使用链表还是红黑树存储)。8本来应该存到索引为1的位置,但是已经满了,所以继续向后找,索引3的位置是空的,所以8存到3位置。在上面的例子中,我们发现有些Hash中很多位置可能要存两个甚至多个元素,很明显单纯的数组是不行的,这种两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。接下来,我们看看如何取。
2023-09-14 14:58:29 269
原创 4.2 栈的经典算法问题
例如,如果当前第一个栈中的元素为 [2, 1, 5, 3, 9],那么第二个栈中的元素为 [2, 2, 5, 5, 9]。对于栈来说,如果一个元素 a 在入栈时,栈里有其它的元素 b, c, d,那么无论这个栈在之后经历了什么操作,只要 a 在栈中,b, c, d 就一定在栈中,因为在 a 被弹出之前,b, c, d 不会被弹出。首先看题目要求,给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s,判断字符串是否有效。// [5, 1, 5] - 5 既是栈顶元素,也是最大元素。
2023-08-07 16:32:23 181
原创 4.1 理解栈手写栈
栈底层实现仍然是链表或顺序表,栈与线性表最大的区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进行。一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。再看具体内容之前,先补充一点,top有的地方指向栈顶元素,有的地方指向栈顶再往上一个空单位,这个根据题目要求设计就好,如果是面试的时候直接问面试官,top指向到哪里,本文采用指向栈顶空位置。14种可能,10种不可能,如上所示。
2023-08-07 11:38:38 79
原创 3.2 双指针思想以及应用
slow表示当前位置之前的元素都是不重复的,而fast则一直向后找,直到找到与slow位置不一样的,找到之后就将slow向后移动一个位置,并将arr[fast]复制给arr[slow],之后fast继续向后找,循环执行。要求:不需要额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。对于第二种情况,我们首先想到的是从头到尾遍历整个字符串,遇到空格的时候就将其后面的元素向后移动2个位置,但是这样的问题在前面说过会导致后面的元素大量移动,时间复杂度为O(n^2),执行的时候非常容易超时。
2023-08-07 09:42:57 222
原创 3.1 数组基础
而在 Java 里,默认会初始化为 0,而 Python 更为灵活可以直接指定是什么,例如 a=[1,2,3,4],就是数组里有4个元素,而 a=[0 for i in range(10)] 这样定义的数组就是 [0,0,0,0,0,0,0,0,0,0]初始化的本质就是覆盖已有的值,用你需要的值覆盖原来的 0,因为数组本来是 [0,0,0,0,0,0,0,0,0,0],这里只不过被你替换成了 [1,2,3,4,5,0,0,0,0,0]。其次,数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存。
2023-08-01 16:50:32 316
原创 2.2 链表反转扩展问题
很遗憾,这样是不行的,会将我们每个位置都加1,例如,如果原始单链表是 {7,8} 这里就会将其变成 {8,9},而不是我们要的 {7,9},导致这样的原因是循环处理链表每个结点元素的时候 sum=digit+1+carry 这一行会将每个位置都多加了一个 1,所以我们要使用变量 adder,只有第一次是加了1,之后该变量变成0了,就不会影响我们后继运算。在上一关介绍链表回文串的时候,我们介绍的是基于栈的,相对来说比较好理解,但是除此之外还有可以使用链表反转来进行,而且可以只反转一半链表,这种方式节省空间。
2023-08-01 09:37:21 186 1
原创 2.1 链表反转
给你单链表的头结点 head,请你反转链表,并返回反转后的链表。示例1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]本题有两种方法,带头结点和不带头结点,我们都应该会,因为这两种方式都很重要,如果搞清楚,很多链表的算法题就不用做了。
2023-07-26 20:38:49 183 1
原创 1.2 链表高频面试题
假设公共子节点一定存在,第一轮遍历,假设La的长度为L1,Lb的长度为L2,则 |L2-L1| 就是两个的差值。这里需要用到两个栈,分别将两个链表的结点入两个栈,然后分别出栈,如果相等就继续出栈,一直找到最晚出栈的那一组。上面三种方法,第一种方法比较常规,第二种方法需要开辟一个O(n)的空间,还要考虑栈与链表的操作等,不中看也不中用。先看一个简单的问题:给你一个链表的头结点 head 和一个整数 val,请你删除链表中所有满足 Node.val == val 的结点,并返回新的头结点。
2023-07-22 10:13:43 464 1
原创 1.1 链表基础
删除的过程不算复杂,也是要找到删除结点的前驱结点,这里同样要在提前一个位置判断,例如下图中要删除5,其前驱结点是4。遍历的时候需要判断 cur.next 是否为5,如果是,则只要执行cur.next=null即可,此时结点5变得不可达,最终会被JVM回收掉。
2023-07-21 20:55:41 109 1
转载 Java 使用 ResourceBundle 类读取 properties 文件中文乱码的解决方案
Java 使用 ResourceBundle 类读取 properties 文件中文乱码的解决方案
2022-01-16 22:51:40 3631
原创 Java流程控制
一.Scanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是 Java5 的新特性,我们可以通过 Scanner 类来获取用户的输入。基本语法Scanner s = new Scanner(System.in);通过 Scanner 类的 next() 与 nextLine()方法获取输入的字符串,在读取前我们一般需要 使用hasNext() 与 hasNextLine() 判断是否还
2021-10-24 23:25:50 1383
原创 Java基础
Java基础一.注释平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会执行,是给我们写代码的人看的书写注释是一个非常好的习惯平时写代码一定要注意规范Java中的注释有三种单行注释多行注释文档注释public class HelloWorld { public static void main(String[] args) { //单行注释 // //输出一个Hel
2021-10-24 22:10:27 1447
原创 Java 面向对象 day4
Java 面向对象 day4Java 面向对象 day4面向对象特征之二: 继承一、定义二、特征三、优点四、基本使用super() 的使用一、super()的使用实例 一一一 子类重写父类的方法二、super()的使用实例 一一一 子类重写父类的变量方法的重写一、定义二、应用 一一一 实现宠物喂养抽象类和抽象方法一、定义二、应用 一一一 学生和教师面向对象特征之三: 多态一、定义二、多态的应用1.父类引用指向子类对象 一一 向上转型2.子类引用指向父类对象 一一 向下转型Java 面向对象 day4
2021-02-19 20:39:10 1380
原创 Java 多线程详解
Java 多线程详解一、基本概念:程序 - 进程 - 线程二级目录三级目录一、基本概念:程序 - 进程 - 线程**程序(program)**是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。二级目录三级目录...
2021-02-13 11:01:26 1427 2
原创 JAVA IO流
JAVA IO流JAVA IO流IO介绍File类(文件及文件夹管理)使用File类管理文件IO流介绍一.IO流常用到的五类一接口二.主要的类如下:三.根据处理数据类型的不同分为字符流和字节流:四.字节流和字符流的区别:五.根据数据流向不同分为输入流和输出流:字符输入输出流应用一.读写字符文件二.字节缓冲流字节输入输出流应用一.读写文件二.复制图片,视频总结JAVA IO流IO介绍I/O 即输入(读)/输出(写)的意思,是Input与Output的简写,IO是任何编程语言都支持的,I/O 是机器获取和
2021-01-27 22:38:10 1432 3
原创 Java集合
Java集合集合简介Java集合框架图Collection集合接口Set集合一.概述二.常用子类1.HashSet类2.TreeSet类map集合一.概述二.常用实现类HashMapCollections集合工具类总结集合简介集合实际上就是一个动态的对象容器(数组,链表,队列,栈,哈希表等),与一般的对象数组不同,集合的大小是可变的,自动扩充的。Java集合框架图Java集合类一般都位于java.util包下。Collection集合接口java.util.Collection 作为Java开
2021-01-27 20:09:00 1382
原创 Java 面向对象 day5
Java 面向对象 day6Java 面向对象 day6接口一.定义二.接口的实现String字符串一.字符串常用方法二.String和StringBuffer的区别包装类一.定义二.代码演示总结Java 面向对象 day6接口一.定义接口是一系列方法,特征的集合或者说接口就是标准、规范或者说接口就是对行为的抽象.有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量
2021-01-23 10:27:49 1132 3
原创 idea @Test 不能使用Scanner类输入到控制台解决方法。
idea @Test 不能使用Scanner类输入到控制台解决方法。方法一1.使用idea,在导航找到help ->Edit Custom VM Options…2.弹出的对话框文件中追加-Deditable.java.test.console=true注意:通过JetBrains Tool box安装的idea 按照上述执行方法二参考网上资料发现,只需在如下两个文件中末尾加入-Deditable.java.test.console=true,然后重启idea即可:...
2021-01-20 10:00:12 2153
原创 Java 面向对象 day3
Java 面向对象 day3Java 面向对象 day3构造方法一.定义二.作用三.格式默认构造方法重载构造方法方法的重载一.定义二.重载的示例方法的封装一.定义二.演示三.在idea中快速定义封装方法单例设计模式:饿汉式与懒汉式一.单例模式的特点二.饿汉式与懒汉式static关键字代码演示总结Java 面向对象 day3构造方法一.定义指定义在类中的一种特殊的方法,该方法没有返回值,方法名要与类名相同,可以使用参数,用于创建对象.二.作用完成对象的初始化工作,它能够把定义对象时的参数传给对象的
2021-01-19 20:24:42 1199
原创 Java 面向对象 day2
面向对象 day2Java 面向对象 day2方法一.方法的概述二.方法的格式说明三.方法的定义1.无参无返回值方法2.带一参数无返回值方法3.带参带返回值方法4.带多个参数带返回值方法四.方法的常见使用方式1.方法的参数传递机制2.形参个数可变的方法3.方法重载总结Java 面向对象 day2方法一.方法的概述在Java的语言中,方法相当于C语言中的函数,但是它与传统的函数也有着明确的不同:在结构化的语言中,函数是一等公民,整个程序是由一个个函数组成的;但是在面向对象的语言里,类是一等公民,整个程
2021-01-18 19:50:49 1047
原创 Java 面向对象 day1
面向对象 day1Java 面向对象 day1类和对象1.定义2.代码演示数组1.数组的定义2.给数组赋值,并遍历数组3.数组的工具类常见的排序法1.冒泡排序法2.插入排序法3.选择排序法作业总结Java 面向对象 day1类和对象1.定义类: 一系列对象的的共同特征的归纳总结,是一种概念的定义叫做类,是创建对象的模板,一种自定义的数据类型;对象: 世界上不管看得到看不到,但是真实存在的个体,叫做对象,是类的具体体现,类的实例。 “万事万物皆对象”2.代码演示#mermaid-svg-o3
2021-01-18 14:03:39 1365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人