自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 和为S的连续正数序列

题目描述:现在要求有多少种连续的正数序列的和为100(至少包括两个数)。其中一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? 思路:由于题目要求至少包含两个数,那么所有可能的序列的最大值均不会超过(sum + 1) >> 1;1, 2, start-1, start, start+1, start+2, ..., end-

2017-10-24 16:36:00 195

原创 判断一颗树是否为平衡二叉树

题意描述:给定一个棵树的根节点,判断该树是否为平衡二叉树?什么是平衡二叉树?平衡二叉树(AVL, Self-balancing binary search tree)是一棵所有节点的左右子树深度差不超过1的二叉搜索树。这表明AVL首先是一个二叉搜索树,在节点的数值上有约束,同时对树形有严格要求,具有以下性质:一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。p

2017-10-23 13:00:49 400

原创 求数字在非降序数组中出现的次数

题目描述:在一个非降序排列的数组中,找出数字target出现的次数。非降序数组,比如{1,1,1,2,3,4,5,5,6}思路一:先通过二分查找,找到arr[index]等于target的index,在分别向前后遍历,直到arr[index] != target为止。算法实现简单,但是当数组形如{x,x,...,x},此时查找x的时间复杂度就退化为线性的O(n).思路二:1. 首先通过二分查找,

2017-10-18 23:06:20 566

原创 第一次只出现一次的字符

题目描述一个字符串全部由字母组成,如果存在只出现一次的字符,则返回第一个字符的位置,如果不存在怎返回-1.思路:因为要寻找第一个只出现一次的字符,所以必须全部遍历,用某个数据结构保存每个位置字符的信息。第二次遍历要在该数据结构中查找值,并且是常熟时间,那么可以采用HashSet。1. 先用一个HashSet保存字符串中所有的字符+去重;2. 用第二个HashSet保存出现过多次的字符;代码如下:

2017-10-17 11:04:34 239

原创 丑数

这是剑指offer上的一道算法题:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:比较容易想到的是,对于数组arr,某些位置t2,t3,t5的数分别乘以2,3,5以后取最小值即为下一个丑数。比如:arr[0] = 1;开始时,t2 = 0,t3 = 0, t5

2017-10-16 22:22:06 165

原创 求一个环内连续m个数的最大和

题目描述:有n个小朋友,围成一个圈,玩丢手绢的游戏。现输入一个数组表示每个小朋友被丢中的次数,同时输入一个整数m(1<=m<=n),求出连续m个小朋友被丢中次数的和的最大值。 示例:input:5//数组大小n12345//数组的个元素值3//连续m个小朋友output:12思路:思路还是比较简单的:假定输入数组为arr,连续m个小朋友1. 求出一个基本值sum,maxfo

2017-10-15 15:51:35 1050 3

原创 求出不超过n的幸运数

题目描述:对于某一个数m,如果它只包含数字4或者7(如44,47,77),我们称之为幸运数。现在输入一个自然数x,求出不超过x的幸运数的个数。 注意:结果可能非常大,请将答案除10^9+7取余数。思路一:1. 引入队列queue,开始时将4,7入队。2. while(queue.peek() <= x) 则将queue头部元素top出队,并且将top*10+4和top*10+7入队

2017-10-15 12:40:29 921

原创 合并两棵二叉树

给定两棵任意的二叉树,将其合并,返回合并后的根节点。思路: 基于先序遍历,如果root1存在就和root2的val相加,如果root1不存在,就把root2的引用直接赋值给root1。代码如下:public class Main { public static void main(String args[]) { TreeNode root1 = new TreeNode(

2017-10-12 18:10:11 2333 1

原创 一个字符串包含的所有回文串

题目描述:输入一个字符串str,输出str包含的所有回文串的个数。如ABA,包含的回文串有A,B,A,AA,ABA共5个。思路: 长度为N的str的不打乱原始顺序所有可能的字符子串个数为2^N个,再判定每一个子串是否是回文串。

2017-10-11 15:44:13 3438

原创 可以回跳的台阶跳

题目一: 青蛙跳台阶有两种方式:一次跳1级,一次跳两级,问从0级阶梯跳到n级阶梯共有多少种方式?

2017-10-11 12:17:01 495

原创 判断某年月日是当年的第几天

题目描述: 输入三个整数year,month,day分别表示当前年月日,输出该天是当年的第几天思路: * 由于只有十二个月,所以可以枚举每个月的天数 * 需要单独考虑的是当前年份是否是闰年&&当前月份是否大月2月,如果都满足,则在总天数上+1

2017-10-11 10:40:32 2635

原创 循环数组-找出最小值

今天面试遇到一个有意思的题,记录一下如下。题目一: 一个循环数组,数组中原始值按升序排列(假设所有值不相等),但是现在从某个位置截断,该位置后面的元素移动到数组的最前面,找出这样的数组的最小值。如 arr = { 1,2,3,4,5,6},移动后arr = {4,5,6,1,2,3},其中最小值为1.

2017-10-10 22:18:11 4389 1

原创 把数组排列成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

2017-10-09 18:29:35 540

原创 二叉搜索树转化为双向链表

题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路一: 按中序遍历,借助中间队列用于存储树种的各个节点,然后遍历队列,给相邻节点建立关系;思路二: 不引入新得变量。只能采用递归的方式: 假设root节点的左右子树已经是双向链表,那么只用将root和左右子树对应链表的最大值和最小值建立连接;

2017-10-07 17:29:52 359

原创 复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的头结点。 思路: 1. 首先根据链表的next遍历一遍,在每个node节点的后面复制一个与node的label相等的节点,如图所示; 2. 再遍历新链表,为复制的节点指定random指针(黄色箭头所示); 3. 将新链表拆分=原链表+复制后的链表

2017-10-06 19:52:45 245

原创 二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出true,否则输出false。假设输入的数组的任意两个数字都互不相同。首先:什么是二叉搜索树(Binary Search Tree)?

2017-10-06 12:58:00 205

原创 Java中运行表达式return 1.0/0.0会发生什么?return 1/0会发生什么?

在Java中运行表达式:1.0 / 0.0,会有返回么?会不会抛出异常或者是编译器error? 那1/0呢?

2017-10-05 22:09:10 9600

原创 Java异常:一个线程运行时发生异常会怎样?

Java中Throwable分为Exception和Error: 出现Error的情况下,程序会停止运行。 Exception分为RuntimeException和非运行时异常。 非运行时异常必须处理,比如thread中sleep()时,必须处理InterruptedException异常,才能通过编译。 而RuntimeException可以处理也可以不处理,因为编译并不能检测该类异常,比

2017-10-05 21:43:21 17056

原创 Java终止线程的四种方法

线程终止常用的四种方式:**终止线程的第一种方式**:等待run()或者是call()方法执行完毕**终止线程的第二种方式**:设置共享变量,如boolean flag。flag作为线程是否继续执行的标志**终止线程的第三种方式**:利用Thread类提供的interrupt()和InterruptedException。**终止线程的第四种方式**:利用Thread类提供的interrupt()和isIn

2017-10-05 19:24:43 4696

原创 interrupt(),interrupted() 和isInterrupted()使用

Thread类中的三个方法: public void interrupt() // 无返回值 public boolean isInterrupted() // 有返回值 public static boolean interrupted() // 静态,有返回值

2017-10-05 17:34:24 955

原创 Callable、Future、Runnable、FutureTask的联系与区别

① Runnable 它是一个接口,在它里面只声明了一个run()方法:public interface Runnable { public abstract void run();}由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。 使用:实现Runnable接口,重写run()方法。 class RunnableImpl implements R

2017-10-05 11:19:52 895

原创 Java创建并执行线程的四种方法

java里面创建线程有四种方式: 无返回: 1. 实现Runnable接口,重写run(); 2. 继承Thread类,重写run(); 有返回: 1. 实现Callable接口,重写call(),利用FutureTask包装Callable,并作为task传入Thread构造函数; 2. 利用线程池;

2017-10-04 23:00:14 25132

原创 java中join()方法的使用

Java中Thread类提供join()方法。作用:用于在当前线程A中添加别的线程B,这时线程A被阻塞,处于Blocked状态,线程B开始执行,当线程B执行完以后,线程A处于可运行状(Runnable),等待cpu的调度再执行。用法:当前线程A必须先用myThread的start()启动线程(否则join()不会被执行),然后调用join(): //线程A中的代码 myThread.s...

2017-10-04 19:55:23 3635

原创 栈的压入、弹出序列

Description: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

2017-10-04 19:52:55 290

原创 Java中Arrays.sort()实现

对基本类型用的快速排序,对对象类型是归并排序。 原因可能和稳定性有关。 一般来说,快速排序效率最高,不过快速排序是不稳定的,就是比如说数组中的值相同的两个整数,排序前和排序的先后顺序可能不一致,这对基本类型来说是完全可以接受的。 但对对象类型来说,用户可能有稳定性方面的要求,于是使用了效率和稳定都能兼顾的归并排序。 查看源代码,选取其中一个,对int数组的排序 1. 升序 2.

2017-10-04 19:51:36 1571

原创 对象的复制:浅复制(clone()方法的使用)+深复制

首先需要了解对象深、浅复制的概念: 浅复制:将一个对象复制后,基本数据类型(如int,String,boolean)的变量都会重新创建,而引用类型,指向的还是原对象(或数组)所指向的。

2017-10-04 19:50:23 787

原创 二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6

2017-10-04 19:49:02 600

原创 合并两个排序后的链表

算法描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

2017-10-04 19:47:33 277

原创 排序算法Java实现

java实现排序算法

2017-10-04 19:44:33 222

空空如也

空空如也

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

TA关注的人

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