有图有真相

一言不合就上源码

java进阶--Java中comparator及comparable完全解析

在讲解comparator之前,先举一个例子说明comparator的用法。假设武器库里有许多的枪,这些枪有两个重要指标一个是长度(len),另一个是威力(pow),现在对这些枪有个评价标准是:在威力相同的情况下长度越短越好,威力不同的情况下威力越大越好,对这些枪进行排序。

2017-04-30 16:58:47

阅读数:344

评论数:7

经典算法--最大存水量问题

题目:给出一个数组代表围柱的高度,求能围柱的最大的水量,例如数组{ 5,2,3,2,4 },最大水量为5。如下图:黄色部分为围柱,绿色部分是能够围住的水,图中围柱的高度依次为 5,2,3,2,4最多能围住的水量是5。 思路:求出每个柱子上面

2017-04-29 20:09:17

阅读数:2000

评论数:3

笔试面试算法经典--最长括号匹配

在求最长括号匹配之前先看看括号下面这个问题:括号匹配“ {()}”这种是括号匹配,而 “{ ] ] { ” 这种就不是括号匹配。判断一个给定的括号字符串是否是匹配的。对于括号匹配这类的问题可以使用 Stack来处理:1 . 当碰到”( [ { “这些左括号就进栈。2 . 如果碰到“) ] }...

2017-04-27 22:40:12

阅读数:831

评论数:2

笔试面试算法经典--最长回文子串

回文的定义正读和反读都相同的字符序列为“回文”,如“abba”、“abccba”是“回文”,“abcde”和“ababab”则不是“回文”。字符串的最长回文子串,是指一个字符串中包含的最长的回文子串。例如“1212134”的最长回文子串是“12121”。下面给出了三种求最长子串的方法。解法1(中心...

2017-04-25 20:49:18

阅读数:1393

评论数:0

Java进阶--深入解析hashmap

HashMap原理先以一个简单的例子来理解hashmap的原理。在Java中先随机产生一个大小为20的数组如下:hash表的大小为7,将上面数组的元素,按mod 7分类如下图:将这些点插入到hashmap中(简单hashmap)后如下图:由上图可知: ① hashmap是用链地址法进行处理,多个...

2017-04-22 22:20:58

阅读数:5043

评论数:7

Java进阶--从源码理解Math.ceil()、Math.floor()、Math.round()

Math.ceil()首先看看Math.ceil()定义:Math.ceil()是常见编程语言中的常用代码,ceil() 方法执行的是向上取整计算,它返回的是大于或等于函数参数,并且与之最接近的整数。下面特殊情况:1.如果当前参数就是整数,直接返回。2.如果当前参数不是数值型、无穷大,或者是正0和...

2017-04-20 17:28:25

阅读数:1634

评论数:0

笔试面试算法经典--最长连续序列

【题目】找出无序数组中的最长连续序列的长度:例如数组[ 1 , 23 , 2 , 300 , 3 , 9 ,4 , 5 , 90 ],最长连续序列为:1,2,3,4,5,因此返回长度为 5。解法 1(时间复杂度O( nlogn)空间复杂度O(1))思路:先对数组进行排序,然后从前向后遍历排序后的...

2017-04-19 19:00:17

阅读数:5136

评论数:1

java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)

1.自动装箱与拆箱的定义装箱就是自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。Java中的数据类型分为两类:一类是基本数据类型,另一类是引用数据类型。如下图:由上可知Java中的基本数据类型有八种分别是:int(4字节) byte(1字节) short(2字...

2017-04-18 20:37:40

阅读数:1956

评论数:1

笔试面试算法经典-打印n个数组中最大的topk

【题目】 有n个长度不一的数组,所有的数组都是有序的,请从大到小一次打印出这n个数组整体最大的 k 个数,如果 k大于n个数组中元素则将数组的元素全部打印。输入n行长度不等的二维数组可以表示n个长度不同的一维数组。例如:输入matrix={{1 , 2, 3 }, {4 , 5 }, {6 ,7...

2017-04-16 17:15:40

阅读数:1317

评论数:0

笔试面试算法经典--数组partition调整使数组的左部分单调有序

【题目】 给定一个有序数组arr,调整使得数组的左部分无重复元素且有序,右边部分不要求。如数组arr[]={1,2,2,2,3,3,4,5,6,9,9} ;调整过后可以为:[1, 2, 3, 4, 5, 6, 9, 2, 3, 2, 9] 。思路:使用标记 u 其中arr[0…u] 表示已经处理...

2017-04-14 16:06:42

阅读数:375

评论数:0

笔试面试算法经典-未排序正整数数组中累加和为给定值的子数组

【题目】 给定一个数组 arr,该数组无序,但每个数均为正数,再给定一个正数 k 。求 arr 的所有子数组中所有元素相加为k的最长子数组长度。例如,arr=[1,2,1,1,1],k=3。累加和为3的子数组为[1,2] ,[2,3], [1,1,1]。解法1(时间复杂度O(N)空间复杂度O(1...

2017-04-13 23:15:29

阅读数:425

评论数:0

笔试面试算法经典--打印数组中相加和为给定值的二元组及三元组(Java)

【题目】给定一个递增的数组,要求打印数组中和为给定值的二元组,例如: arr[]={-8, -4, -1, 0, 1, 3, 4, 5, 6, 7, 9} , k=10,打印结果为:  1——9  3——7  4——61.打印二元组解法1(时间复杂度 O(N * N)空间复杂度 O(1)) ...

2017-04-13 21:52:38

阅读数:679

评论数:0

笔试面试算法经典--二叉树层次打印

【题目描述】 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。例如下面的树输出为: 12 5 18 2 9 15 19 17 16解法: 用队列来保存每层的节点,使用层次遍历,记录每层节点的个数,每层节点的个数其实...

2017-04-12 22:49:11

阅读数:461

评论数:0

笔试面试算法经典--动态规划-最大子矩阵和(Java)

【题目】 给定一个矩阵 matrix,其中矩阵中的元素可以包含正数、负数、和0,返回子矩阵的最大累加和。例如,矩阵 matrix 为: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8...

2017-04-12 17:36:20

阅读数:1779

评论数:0

笔试面试算法经典--连续子数组的最大乘积及连续子数组的最大和(Java)

1. 子数组的最大和 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如数组:arr[]={1, 2, 3, -2, 4, -3 } 最大子数组为 {1, 2, 3, -2, 4} 和为8。解法1(时间复杂度O...

2017-04-12 16:31:33

阅读数:367

评论数:0

笔试面试算法经典--二叉搜索树转有序的双向链表(Java)

题目: 输入一棵二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求:不能创建任何新的结点,只能调整树中结点指针的指向。如下图:解法1(非递归): 思想:二叉搜索树的中序遍历是一个有序的数组,在中序遍历的时候,用 Pre 指针保存前一个节点,当访问到当前节点的时候,将 Pre 节点右指针,...

2017-04-11 23:07:25

阅读数:1153

评论数:0

笔试面试算法经典--判断二叉树是否是平衡二叉树(Java)

平衡二叉树(Balanced Binary Tree)又被称为AVL树,且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。如下面的三棵树:只有中间才是平衡二叉树。解法: 思路1:从根节点开始,求出根的左右子树的高度,如果根的左右子树的高...

2017-04-11 22:40:54

阅读数:1083

评论数:0

笔试面试算法经典--二叉树的子结构(Java)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构(空树不是任意一个树的子结构)。下图中:右边的二叉树是左边二叉树的子结构解法: 先序遍历 A树,如果当前节点与 B树的根节点相同,则判断 B 是不是 A的子树,判断 B是 A 的子树的也用递归:比较 B 的左子树 是否是 A 左子树的子结构...

2017-04-11 14:34:03

阅读数:725

评论数:0

笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)

给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像。解法1(递归)思路1:如果当前节点为空,返回,否则交换该节点的左右节点,递归的对其左右节点进行交换处理。public static void mirrorTree(TreeNode root) { if(r...

2017-04-10 19:04:41

阅读数:2275

评论数:1

笔试面试算法经典-找到数组中出现次数大于N/k的数(Java)

【题目】 给定一个整型数组arr,再给定一个整数k,打印所有出现次数大于 N/K 的数。如果没有这样的数,打印提示信息。 【要求】 时间复杂度为O(N*K),额外空间复杂度为O(K)。【思路】 每次从数组中删除 K 个不同的数,如果某个数的次数大于 N/K ,这个数最后肯定会剩下来,数学证...

2017-04-08 22:46:07

阅读数:1765

评论数:1

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