自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Java 创建线程的三种方式及其对比

Java中创建线程主要有三种方式:一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。package com.thread; public class ...

2019-03-31 16:07:57 185

原创 剑指offer面试题51:数组中的逆序对(Java 实现)

题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,6},{7,5},{7,4},{6,4},{5,4}。测试用例:功能测试:输入未经排序的数组;递增排序的数组;递减排序的数组;输入的数组包含重复的数字。 边界测试:输入的数组只有两个数字;输入的数组只...

2019-03-10 09:15:48 884

原创 剑指offer面试题50:第一个只出现一次的字符(Java 实现)

题目:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。如果字符串为空,返回-1测试用例:功能测试:数组中存在或者不存在只出现一次的字符。 特殊测试:数组中全部都是只出现一次的字符。 负面测试:输入是数组为空。方法一:暴力法,时间复杂度为 O(n²)。思路:一个循环遍历数组中每一个字符,另一个循环比较拿遍历到的...

2019-03-10 09:14:18 211

原创 剑指offer面试题49:丑数(Java 实现)

题目:我们把只包含因子2,3,5的数称为丑数(Ugly Number). 求按从小到大的顺序的第1500个丑数。 例如6,8都是丑数,但14不是,因为它含有因子7.习惯上我们把1当作第一个丑数方法一:逐个判断每个整数是不是丑数的解法,直观但不够高效(暴力法)思路:所谓一个数m是另一个数n的因子,是指n能被m整除,也就是说n%m==0.根据丑数的定义,丑数只能被2,3,5整除。也就是说...

2019-03-10 09:12:55 195

原创 剑指offer面试题46:把数字翻译成字符串(Java 实现)

题目:给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”…25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。测试用例:功能测试:输入的数字只有一位或者多位。 边界测试:输入包含25、26的数字。 负面测试:输入负数或者0。思路:利用递归的...

2019-03-10 09:11:31 305

原创 剑指offer面试题45:把数组排成最小的数(Java 实现)

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。测试用例:功能测试:输入的数组只有一个数字或者有多个数字;输入的数组中数字有重复的位数。 负面测试:输入的数组为空。思路:首先要注意这是一个大数问题,两个 int 类型的数字拼接起来可能会溢出,需要把它...

2019-03-10 09:10:18 181

原创 剑指offer面试题44:数字序列中某一位的数字(Java 实现)

题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。测试用例:功能测试:输入10、190、1000 等数字。 边界测试:输入0、1 等。 负面测试:输入的是负数。思路:按位数查找,时间复杂度为O(logn)举例分析,比如找第1001位数字...

2019-03-10 09:09:20 412 1

原创 剑指offer面试题43:1-n整数中1出现的次数(Java 实现)

题目:输入一个整数n,求 1-n 这 n 个整数的十进制表示中 1 出现的次数。例如,输入12, 1-12 中这些整数中包含1的数字有1、10、11 和 12, 1 一共出现 5 次。方法一:暴力法,时间复杂度为 O(nlogn)直接循环遍历求出 n 个数中每一个数包含 1 的次数,然后累加起来。//方法一:暴力法 public int NumberOf1Between1An...

2019-03-10 09:07:34 347

原创 剑指offer面试题42:连续子数组的最大和(Java 实现)

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。方法一:通过枚举数组的所有子数组并求它们的和,一个长度为n的数组,子数组总共有 n(n-1)/2,计算所有子数组的和,时间复...

2019-03-10 09:04:28 1598

原创 剑指offer面试题41:数据流中的中位数(Java 实现)

题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。测试用例:功能测试:从数据流中读取偶数或者奇数个数。 边界测试:从数据流中读取 0、1、2 个数。思路:使用最大堆和最小堆两个容器,最大堆用来存放依次传入的数组成的数组中较小的数,最小堆用来存放较...

2019-03-10 09:02:09 333

原创 剑指offer面试题40:最小的k个数(Java 实现)

题目:输入n个整数,找出其中最小的k个数。例如输入4、 5、 1、 6、 2、 7、 3、 8这8个数字,则最小的4个数字是1、 2、 3、 4。测试用例:功能测试:输入的数组中有或者没有相同的数字。 边界测试:输入的 k 等于 1 或者等于数组的长度。 负面测试:k 小于1;k 大于数组的长度;输入的数组为空。方法一:时间复杂度为 O(nlogn)思路:直接对数组进行排序。...

2019-03-10 09:00:25 177

原创 剑指offer面试题39:数组中出现次数超过一半的数字(Java 实现)

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。测试用例:功能测试:数组中存在或者不存在一个出现次数超过数组长度一半的数字。 特殊测试:输入的数组为空;输入的数组只有一个数字。方法一:时间复杂度为O(nlogn)思路...

2019-03-09 14:27:42 205

原创 剑指offer面试题38:字符串的排列(Java 实现)

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。思路:第一步求所有可能出现在第一个位置的字符,固定第一个字符,然后遍历后面的所有字符和它交换;第二步求所有可能出现在第二个位置的字符,固定第二个字符,然后遍历后面所有字符与它交换;第三步。。。同样...

2019-03-09 14:26:10 367

原创 剑指offer面试题37:序列化二叉树(Java 实现)

题目:请实现两个函数,分别用来序列化和反序列化二叉树。思路:序列化:用前序遍历的方法递归遍历二叉树,将遍历到的元素添加到数组字符串中,如果遇到空格就往字符串中添加字符 “$”,每一个字符用逗号隔开; 反序列化:先利用正则表达式把字符串中的逗号去掉,然后遍历字符串,如果遍历到的不是字符 “$”,就用它来构造二叉树的根节点,然后用递归的方式同样构造二叉树的左子树和右子树。测试用例:功能...

2019-03-09 14:25:11 182

原创 剑指offer面试题36:二叉树与双向链表(Java 实现)

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:利用中序遍历的方法递归遍历二叉树,把二叉树拆分为左子树、根节点、右子树三部分,再连接起来。第一步先遍历左子树转化为链表,然后把根节点连在左子树的最后节点,然后再递归遍历右子树。测试用例:1. 功能测试:完全二叉树;所有节点只有左子树的二叉树;所有节点只有右子树的...

2019-03-09 14:24:06 743

原创 剑指offer面试题35:复杂链表的复制(Java 实现)

题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。思路:根据原链表中每个节点N创建对应的新节点N’。并把N’链接到N的后面。 设置复制出来的节点的random节点。假设N的random指向节点S,因为N’是N的下一个节点,所以S’也应该为S的下一个节点。 把链表拆分。奇数位置的节点链接起来...

2019-03-09 14:23:15 158

原创 剑指offer面试题34:二叉树中和为某一值的路径(Java 实现)

题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:利用二叉树的前序遍历,把每一个遍历到是根节点保存在一个 list 中。然后判断当前节点是不是叶节点,若不是叶节点,则用递归的方式接着遍历它的左节点和右节点;若是叶节点则判断从根节点到这个叶节点的路径和等不等于 target,如果相等就把这条...

2019-03-09 14:22:06 420

原创 剑指offer面试题33:二叉搜索树的后序遍历序列(Java 实现)

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出True,否则输出False。假设输入的数组的任意两个数字都互不相同。思路:已知条件:后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。确定root; 遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树; 遍历右子树,若...

2019-03-09 14:20:35 179

原创 剑指offer面试题32:从上到下打印二叉树(Java 实现)

题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:此题实际考察树的按层遍历的算法,利用一个队列来实现。首先打印树的根节点,然后判断这个节点是否有子节点,若有子节点就把它们放入队列中。接下来每次从队列中取出并打印一个节点,同时判断它有没有子节点,若有子节点同样地放入队列中,最后当队列空了,树的节点也就打印完了。测试用例:功能测试:完全二叉树;所有节点只有左子树的二叉树...

2019-03-09 14:19:13 170

原创 剑指offer面试题31:栈的压入、弹出序列(Java 实现)

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、 2、 3、 4、 5是某栈的压栈序列,序列4、 5、 3、 2 、1是该压栈序列对应的一个弹出序列,但4、 3 、5 、1 、2就不可能是该压栈序列的弹出序列。思路:利用一个辅助栈来模拟出栈入栈的过程,首先按入栈序列把元素一个个压入栈中,每压入一个元素后判断栈顶...

2019-03-09 14:15:06 188

原创 剑指offer面试题30:包含min函数的栈

题目:设计包含min 函数的栈。定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。 要求函数min、push 以及pop 的时间复杂度都是O(1)。思路:定义两个栈,一个用来储存数据,一个用来储存最小值。测试用例:新压入栈中的数字比之前的最小值大 新压入栈中的数字比之前的最小值小 弹出的数字不是最小元素 弹出的数字是最小元素public class tes...

2019-03-09 14:04:53 156

原创 剑指offer面试题29:顺时针打印矩阵(Java 实现)

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:可以把矩阵看成是由外圈内圈这样一圈圈组成的,打印第一圈的左上角坐标为(0,0),打印第二圈的左上角坐标为(1,1),依次类推为(start,start)。然后我们可以构造一个函数来打印最外...

2019-03-02 21:49:55 279

原创 剑指offer面试题28:对称的二叉树(Java 实现)

题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:二叉树是否对称,只要采用前序、中序、后序、层次遍历等任何一种遍历方法,分为先左后右和先右后左两种方法,只要两次结果相等就说明这棵树是一颗对称二叉树。所以我们可以通过比较二叉树的前序遍历序列和对称前序遍历序列来判断二叉树是不是对称的。要注意在遍历的过程中要把空指针也考...

2019-03-02 21:33:55 266

原创 剑指offer面试题27:二叉树的镜像(Java 实现)

题目:给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像。思路:本题只要遍历树中的每一个节点,然后交换每一个节点的左右子节点就可以了,因为对每一个节点来说交换左右子节点这个过程都是一模一样的,所以可以采用递归的方式来进行操作。测试用例:1. 功能测试:普通二叉树;只有一个节点的二叉树;二叉树的所有节点都没有左子树或者右子树。2. 特殊测试:输入二叉树的根节点为空。...

2019-03-02 21:27:59 274

原创 剑指offer面试题26:树的子结构(Java 实现)

题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:先通过遍历A树找到与B树根节点相等的节点(先拿A树的根节点比较,不匹配的话再利用递归思想拿A树根节点的左孩子和右孩子进行比较)。如果B树的根节点和A树中所有节点都不匹配的话就直接返回 false;如果B树的根节点在A树中有匹配的话再调用另外一个函数来分别比较匹配后的根节点的左子树和右子...

2019-03-02 21:13:43 184

原创 剑指offer面试题25:合并两个排序的链表(Java 实现)

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。思路:分别遍历两个链表,每一个都比较两个链表的头结点,把小的那一个头结点放到一个新定义的链表中,因为每一个比较合并的过程都是一模一样的,所以可以使用递归来实现。这里要注意输入的链表为空的特殊情况。测试用例:1. 功能测试:输入的两个链表有多个节点;节点的值互不相同或者存在值相等的多个节点。2. 特殊测试...

2019-02-28 20:54:50 544 1

原创 剑指offer面试题24:反转链表(Java 实现)

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。链表结点如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}思路:直接遍历链表中的节点,把当前节点的指针指向前一个...

2019-02-28 20:44:35 184

原创 剑指offer面试题23:链表中环的入口节点(Java 实现)

思路:首先第一步定义一快一慢的两个指针用来判断链表中是否存在环,如果链表中存在环,则两个指针最终会相遇,此时慢指针走过的节点正好等于环中节点的数目(两个指针不相遇的情况即链表中不存在环,直接返回 null);然后第二步把快指针移到头结点的位置,然后两个指针同时向前移到,两个指针再次相遇(肯定会相遇)的位置即为环入口节点的位置。测试用例:1. 功能测试:链表中包含或者不包含环;链表中有多个节点...

2019-02-28 20:31:43 120

原创 剑指offer面试题22:链表中倒数第k个节点(Java 实现)

题目:输入一个链表,输出该链表中倒数第k个结点。思路:定义一快一慢两个指针,快的指针先走到 k-1 的位置,然后从第 k 个位置开始,两个指针同时走,当快的指针走到最后一个位置的时候,慢指针所在的位置就是倒数第 k-1 的位置。测试用例:1. 功能测试:第k个节点位于链表的中间;第k个节点是链表的第一个节点;第k个节点是链表的最后一个节点。2. 负面测试:输入的链表头结点为空;链表的节...

2019-02-28 20:24:06 256

原创 剑指offer面试题21:调整数组顺序使奇数位于偶数前面(Java 实现)

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:按照冒泡排序的思想,从头到尾遍历数组,依次比较两个相邻的元素,如果前面的元素是偶数,后面一个元素是奇数,就交换这两个元素。测试用例:1. 功能测试:输入的数组中的奇数、偶数交替出现;输入的数组中所有偶数都出...

2019-02-28 20:20:05 117

原创 剑指offer面试题19:正则表达式匹配(Java 实现)

题目:请实现一个函数用来匹配包括 '.' 和‘*’的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。测试用例:功能测试:模式字符里面包含普通字符、‘.’、‘*’;匹配或者不匹配。负面测...

2019-02-28 20:18:14 380 1

原创 剑指offer面试题18:删除链表的节点(Java 实现)

题目一:O(1)时间删除链表节点。给定单向链表的头指针head和一个节点指针,定义一个函数在O(1)时间删除该节点。测试用例:1. 功能测试:从有多个节点的链表中分别删除头结点、中间节点、尾节点。2. 边界测试:从只有一个节点的链表中删除节点。3. 负面测试:输入的头结点为空;输入的要删除的节点为空。思路一:常规做法,时间复杂度为 O(n)直接从头到尾遍历找到要删除节点的前一...

2019-02-28 19:56:46 452 1

原创 剑指offer面试题17:打印1到最大的n位数(Java 实现)

题目:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999。测试用例:1. 功能测试:输入1、2、3...2. 特殊测试:输入0、-1...方法一:找出最大的 n 位数,直接打印。//找出最大的n位数,直接打印 public void print1ToMaxOfNDigits_1(int n){ int numbe...

2019-02-28 19:47:24 319

原创 剑指offer面试题16:数值的整数次方(Java 实现)

题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。思路:本题主要考察的是需要考虑的情况比较多:1. 指数为负数,底数为0,无意义(在Java中可以选择抛出异常)2. 指数为0,返回13. 指数为正数(base,exponent)4. 指数为负数,底数不为0(1/b...

2019-02-26 11:14:25 163

原创 剑指offer面试题15:二进制中1的个数(Java 实现)

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。比如输入9,9的二进制表示是1001,1的个数是2,所以输出2。测试用例:1. 正数(包括边界值1、0x7FFFFFFF)2. 负数(包括边界值0x80000000、0xFFFFFFFF)3. 0方法一:常规解法,循环次数等于整数二进制的位数首先把 n 和1做与运算,判断最低位是不是为1,接着把1左移一位得到1...

2019-02-26 10:55:07 143

原创 剑指offer面试题14:剪绳子(Java 实现)

题目:给你一根长度为 n 的绳子,请把绳子剪成 m 段 (m 和 n 都是整数,n > 1并且m > 1)每段绳子的长度记为 k[0],k[1],…,k[m].请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.方法一:动态规划。时间复杂度为 O(n²),空间复杂度为 O(n)可以...

2019-02-26 10:29:55 172

原创 剑指offer面试题12:矩阵中的路径(Java实现)

题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如a  b  c  es  f   c  s a  d  e  e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,...

2019-02-26 09:50:58 159

原创 剑指offer面试题11:旋转数组的最小数字(Java 实现)

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序(非递减数组)的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。方法一:直接遍历查找最小的元素,时间复杂度为O(n)public int minNumberInRo...

2019-02-25 20:46:18 141

原创 抽象类与接口

一、抽象类在面向对象领域中一切都是对象,所有的对象都是用类来描述的,但不是所有的类都可以用来描述对象,比如抽象类。如果一个类没有具体的信息来描述对象,而需要其他更具体的子类来支撑,那么这个类就是抽象类。好比 new animal();只知道他是动物类,而不知道他具体描述的是哪些动物,也不知道这些动物长什么样,所以他就是抽象类,这时候就需要一些更具体的子类来描述他,比如猫、狗这些知道具体长相的...

2019-02-23 13:22:41 95

原创 Java 重写(Override)与重载(Overload)

重写(Override)重写是子类对父类的允许访问的方法(非private 和 final)的实现过程(核心内容)进行重新编写,方法名、形参、返回值类型 都不能改变。重写的好处在于子类可以根据自己的需要,定义自己的行为(方法的内容)。重写的规则:1、方法名、形参、返回值类型都必须与重写的方法相同。2、访问权限不能比父类中被重写的方法访问权限低,比如:如果父类中被重写的方法访问权...

2019-02-23 13:03:19 95

空空如也

空空如也

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

TA关注的人

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