自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 05、链表

1. 概念(是什么)i.常见链表结构单链表链表通过指针将一组零散的内存块串联在一起,把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。如图所示,把记录下个结点地址的指针叫作后继指针 next。头结点:第一个结点,用来记录链表的基地址。可以用于遍历整条链表尾结点:最后一个节点,指针不是指向下一个结点,而是指向一个空地址 NULL,表示这是链表上最后一个结点。插入、删除操作只需要考虑相邻结点的指针改变,...

2020-08-05 23:48:48 426

原创 04、数组

概念(是什么)数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表(Linear List)线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。非线性表之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。比如二叉树、堆、图等。连续的内存空间和相同类型的数据正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”。但有利就有

2020-08-03 23:42:05 535

原创 03、时间、空间复杂度分析(下)

四个复杂度分析知识点最好情况时间复杂度(best case time complexity) 最坏情况时间复杂度(worst case time complexity) 平均情况时间复杂度(average case time complexity) 均摊时间复杂度(amortized time complexity)最好、最坏情况时间复杂度最好情况时间复杂度:在最理想的情况下,执行这段代码的时间复杂度最坏情况时间复杂度:在最糟糕的情况下,执行这段代码的时间复杂度举个小栗子:.

2020-08-01 22:43:53 281

原创 02、时间、空间复杂度分析(上)

什么是复杂度分析?数据结构和算法本身是让代码运行得更快,让代码更省空间,提升代码执行效率。 因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。 分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。 复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。为什么要进行复杂度分析?和性能测试相比(依赖测试环境——硬件;受数据规模影响较大),复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。 掌握复杂度分析,将能编写出性能更优的代码,有.

2020-08-01 00:02:57 224

原创 01、如何系统高效地学习数据结构与算法?

为什么学习数据结构和算法?直接好处是能够有写出性能更优的代码。 训练逻辑思维提升看待问题的深度,解决问题的角度就会完全不一样。什么是数据结构?什么是算法?数据结构:指的是“一组数据的存储结构”算法:指的是“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用在特定的数据结构上的。...

2020-07-30 21:50:17 204

原创 浅析中间件

中间件是什么?中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。中间件处于操作系统软件与用户的应用软件的中间。(生产者消费者模式,中间件充当中介)中间件 = 平台 + 通信,只有用于分布式系统中才能称为中间件。中间件的作用是什么?将具体业务和底层逻辑解耦的组件。主要解决应用耦合,异步消息,流量削锋等问题。基于面向服务SOA 架构的中间件,通过服务的封装,...

2019-04-30 21:59:22 818

原创 【剑指 Offer 学习】【面试题 26: 复杂链表的复制】【思路】

题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路:根据原始链表的每个结点 N 创建对应的 N’ 将复制后的结点接在原结点后原始链表:A -> B -> C -> D -> E...

2019-01-15 22:21:01 131

原创 【剑指 Offer 学习】【面试题 25: 二叉树中和某一值的路径】【思路】

题目:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路:由于路径是从根结点出发到叶结点, 也就是说路径总是以根结点为起始点,因此我们首先需要遍历根结点。在树的前序、中序、后序三种遍历方式中,只有前序遍历是首先访问根结点的。...

2019-01-14 21:09:25 239

原创 【剑指 Offer 学习】【面试题 24: 二叉搜索树的后序遍历序列】【思路】

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路:输入的数组不能为空,并且有数据。 先找到右子树的开始位置,然后分别进行左右子树递归处理。 代码:package 二叉搜索树的后序遍历序列24;import java.util.*;/** * 输入一个整数数组...

2019-01-13 21:26:21 150

原创 第 9 讲:谈谈 Vector、ArrayList、LinkedList 的区别

共同点:Hashtable、HashMap、TreeMap 都是最常见的一些 Map 实现,是以键值对的形式存储和操作数据的容器类型。 Hashtable:元素特性早期 Java 类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,无序,由于同步导致的性能开销,所以已经很少被推荐使用。初始化与增长方式HashTable在不指定容量的情况下的默认容量为11,且不...

2019-01-12 16:26:06 207

原创 【剑指 Offer 学习】【面试题 23: 从上往下打印二叉树】【思路】

题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路:创建一个动态数组用于存储节点值、方法的返回 参数为空时返回空数组 创建一个队列用于存储未遍历的数组,并将根结点入队 记录当前处理的结点并控制台输出 将根结点存入要返回的数组 将当前结点的左右节点依次保存到队列的结尾(FIFO,先入先出) 代码:package 从上往下打印二叉树23;imp...

2019-01-12 15:07:47 139

原创 【剑指 Offer 学习】【面试题 22: 栈的压入、弹出序列】【思路】

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路:创建一个栈用于压入弹出元素 遍历第一个序列,依次压入栈 第二个序...

2019-01-11 08:25:25 123

原创 【剑指 Offer 学习】【面试题 21: 包含 min 函数的栈】【思路】

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 思路:用一个栈 data 保存数据,用另外一个栈 min 保存依次入栈最小的数 比如,data中依次入栈,5, 4, 3,   8, 10, 11, 12, 1          则 min 依次入栈,5, 4, 3,no,no, no, no, 1no 代表此...

2019-01-09 21:16:29 120

原创 【剑指 Offer 学习】【面试题 20: 顺时针打印矩阵】【思路】

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路:用左上和右下的坐标定位出一次要旋转打印的数据,一次旋转打印结束后,往对角分别前进和后退一个单位。...

2019-01-08 21:01:40 159

原创 第 8 讲:谈谈 Vector、ArrayList、LinkedList 的区别

共同点:这三者都是实现集合框架中的 List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。 Vector:Java 早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。 读写机制:Vector 默认...

2019-01-08 18:52:46 137

原创 第 7 讲:谈谈 int 和 Integer 的区别、Integer 的值缓存范围

int:int 是 Java 的 8 个原始数据类型(Primitive Types,boolean、byte 、short、char、int、float、double、long)之一。Java 语言虽然号称一切都是对象,但原始数据类型是例外。 Integer:Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int ...

2019-01-07 19:39:35 450

原创 【剑指 Offer 学习】【面试题 19: 二叉树的镜像】【思路】

题目:操作给定的二叉树,将其变换为源二叉树的镜像。 思路:使用递归交换每个节点的左右子树位置。 代码:package 二叉树的镜像;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va...

2019-01-07 16:08:40 125

原创 第 6 讲:谈谈 Java 反射机制,动态代理是基于什么原理?

反射机制Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。可以在运行时通过提供完整的“包名+类名.class”得到某个对象的类型。功能在运行时能判断任意一个对象所属的类。在运行时能构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法。利用Java反射机制我们可以加载一个运行时才得知...

2019-01-06 21:28:49 2356

原创 【剑指 Offer 学习】【面试题 18: 树的子结构】【思路】

题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路:若根节点相等,利用递归比较他们的子树是否相等 若根节点不相等,则利用递归分别在左右子树中查找。详见代码,未添加测试用例 代码:package 树的子结构;import javax.sound.midi.Soundbank;/** * 输入两棵二叉树A,...

2019-01-06 19:04:49 275 2

原创 【剑指 Offer 学习】【面试题 17: 合并两个排序的链表】【思路】

题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路:递归当前较小节点的下一个结点 代码:package 合并两个排序的链表;class ListNode { int val; ListNode next = null; public ListNode(int val) { this.val = va...

2019-01-05 19:29:16 170

原创 第 5 讲:谈谈 String、StringBuffer、StringBuilder 的区别

StringString 提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。String 的创建机理由于 String 在 Java 中使用过于频繁...

2019-01-04 21:07:48 264 3

原创 【剑指 Offer 学习】【面试题 16: 反转链表】【思路】

题目:输入一个链表,反转链表后,输出新链表的表头。 思路:创建 head 节点的 pre 和 preserve_next  用 preserve_next 保存 head 节点的 next 节点,使得单链表不会因为没有 next 节点断裂 将 head 节点指向 next 节点变为指向 pre 节点,单次反转完毕 将 pre、 head、 next 三个节点依次向后移动一个节...

2019-01-04 19:46:19 172

原创 第 4 讲:谈谈强引用、软引用、弱引用、幻象引用的区别

强引用、软引用、弱引用、幻象引用的区别:不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。强引用(“Strong” Reference):我们平常典型编码 Object obj = new Object() 中的 obj 就是强引用。通过关键字 new 创建的对象所关联的引用就是强引用。 当 JVM 内存空间不足,JVM 宁愿抛出 OutOfMe...

2019-01-03 21:51:52 190

原创 【剑指 Offer 学习】【面试题 15 : 链表中倒数第K个结点】【思路】

题目:输入一个链表,输出该链表中倒数第k个结点。 思路:制造一把长度为 K 的尺子,尺子的后端走到链表末段,那么尺子的前端就是倒数第 K 个结点 。 代码:package 链表中倒数第K个结点;class ListNode { int val; ListNode next = null; public ListNode(int val) { this...

2019-01-03 10:58:03 127

原创 【剑指 Offer 学习】【面试题 14 : 调整数组顺序使奇数位于偶数前面】【思路】

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路:插入排序的思想遍历数组,将遍历的第一个奇数(坐标 i)依次与前一个偶数(坐标 i - 1)对换位置 记录已调整顺序的奇数的个数,后续的遍历,遍历至当前记录值即可 冒泡排序思想待完善 ...

2019-01-02 19:35:23 114

原创 【剑指 Offer 学习】【面试题 11 : 数值的整数次方】【思路】

题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路:判断底数是否为 0(当两数相差很小时,可以认为相等),指数是否小于 0; 取指数的绝对值计算整数次方,若指数为负,通过【1 / 当前结果】得到负的整数次方; 计算整数次方,使用递归的方法:当 n 为偶数时,a ^ n = a ^ (n / 2) * a ...

2018-12-31 11:25:42 113

原创 【剑指 Offer 学习】【面试题 10 : 二进制中 1 的个数】【思路】

题目:输入一个整数,输出该数二进制表示中1的个数。 思路:如果一个整数不为 0,那么这个整数至少有一位是 1。如果我们把这个整数减 1,那么原来处在整数最右边的 1 就会变为 0,原来在 1 后面的所有的 0 都会变成 1 (如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数 1100,减去 1 后,结果是 1011,第三位变成 0,它后面...

2018-12-30 22:39:20 123

原创 【剑指 Offer 学习】【面试题 9 进阶 : 矩形覆盖】【思路】

题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法? 思路:依然是【斐波那契数列】当 n = 0 时,return 0;当 n = 1 时,return 1;当 n = 2 时,两个小矩形同时横着或者竖着,return 2;当 n > 2 时,举个栗子:假如 n ...

2018-12-29 13:05:28 155

原创 【剑指 Offer 学习】【面试题 9 进阶: 跳台阶、变态跳台阶】【思路】

题目(跳台阶):一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思路:假设现在 6 个台阶,可以从第 5 跳一步到 6,这样的话有多少种方案跳到 5 就有多少种方案跳到 6,另外也可以从 4 跳两步跳到 6,跳到 4 有多少种方案的话,就有多少种方案跳到 6,其他的不能从 3 跳到 6 什么的啦,所以最...

2018-12-28 17:07:29 203

原创 第 3 讲:谈谈 final、finally、 finalize 有什么不同

final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。finally 则是 Java 保证重点代码一定要被执行的一种机制。我们可以使用 try-finally或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlo...

2018-12-28 16:21:32 141

原创 第 2 讲:谈谈 Exception 和 Error 的区别

Exception 和 Error 的区别:Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。 Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Exception 又分为可检查(checked...

2018-12-28 08:46:32 156

原创 【剑指 Offer 学习】【面试题 9 : 斐波那契数列】【思路】

题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39斐波那契数列:0 1 1 2 3 5 8 13 21 34 55...... 思路:直接使用递归的方法,但是,递归的方法可能会遇到 Stack Overflow。 动态规划的方法:从第 2 项开始自底向上,先用一个变量记录已经计算的斐波那契数列值,再将相...

2018-12-27 21:40:34 138

原创 第 1 讲:谈谈对 Java 平台的理解

1、谈谈对 Java 平台的理解?Java 本身是一种面向对象的语言,最显著的特性包括两个方面:Write once, run anywhere(一次编译,到处执行)。 GC, Garbage Collection(垃圾收集)。 Java 特性:面向对象(封装,继承,多态) 平台无关性(Java 虚拟机(JVM )运行.class 文件):不同的平台都有可以让 Java 运行...

2018-12-26 21:14:05 153

原创 【剑指 Offer 学习】【面试题 8 : 旋转数组的最小数字】【思路】

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路:使用【二分法】mid = low + (high - low)/2需要考虑三种情况:...

2018-12-26 16:28:40 133

原创 【剑指 Offer 学习】【面试题 7 : 重建二叉树】【思路】

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:push 动作都在 stack1 中进行,pop 动作在 stack2 中进行。 边界条件判断,栈为空时,抛出异常。 当 stack2 不为空时,直接 pop; 当 stack2 为空时,先把 stack1 中的元素 pop 出来,push 到 stack2 中,再从 stack...

2018-12-25 18:43:48 154

原创 【剑指 Offer 学习】【面试题 6 : 重建二叉树】【思路】

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路:【前序遍历】序列的【第一个节点】是【树的根节点】,由此创建根节点; 从【中序遍历】序列中找到【根节点】的位置,【根节点】的【左边】就...

2018-12-25 16:40:16 113

原创 Java笔试题(五)—— 谈谈对 Java 平台的理解

谈谈对 Java 平台的理解Java 本身是一种面向对象的语言,最显著的特性有两个方面:“书写一次,到处行”(Write once, run anywhere),即跨平台特性,并不是说Java语言可以跨平台,而是在不同的平台都有可以让 Java 语言运行的环境而已(.class文件——字节码文件就是可以到处运行的文件); 垃圾收集(GC, Garbage Collection),Ja...

2018-11-12 21:10:15 151

原创 【剑指 Offer 学习】【面试题 4 : 替换空格】【思路】

题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy,则经过替换之后的字符串为We%20Are%20Happy。 思路:遍历的方向两边皆可。 若从后往前遍历,新的字符串需要反转。 用 String 类的方法判断字符串各位置对应的字符是否为空格。 知识点:charAt() 方法: 返回此序列中指定索引处的 char 值...

2018-11-11 11:31:57 195

原创 Java笔试题(四)—— 多线程

1.synchronized :synchronized 是 Java 中的关键字,是一种同步锁。 无论 synchronized 关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果 synchronized 作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。  每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所...

2018-11-01 20:54:27 215

原创 27. 移除元素

题目:移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:        给定 nums = [3,2,2,3], val = 3,        函数应该返回新...

2018-11-01 20:18:13 151

空空如也

空空如也

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

TA关注的人

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