- 博客(63)
- 资源 (17)
- 收藏
- 关注

原创 B树(B-树)、B+树、AVL树、B*树
看数据结构的时候经常容易被各种树绕晕,所以重新整理下这些 纠结树。1,B树(B-树)注意,好多地方都喜欢说B-树,给人一种错觉B-树与B树是两种数据结构,其实是一种。外文翻译的时候B-tree,有的人喜欢翻译成B-树,有的翻译为B树,所以才造成了这样的错觉。先看看B树的数据结构:这是从july算法的博客中拿过来的一个图定义为: 一颗m阶的B树
2016-03-23 20:33:30
1247

原创 常见内排序算法的java实现
先把结果放在前面,这样每次看到就能熟悉一次。排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类: (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。 (2)、选择排序:简单选择排序、堆排序。 (3)、交换
2016-03-10 11:35:16
789

原创 滴血总结(java版):最长公共子序列(子串)、最长公共回文子序列(子串)、最长公共前缀(后缀)
1,最长公共前缀问题有点类似冒泡算法,每次都要找最小的串的长度,然后进行截取,代码如下public String longestCommonPrefix(String[] strs) { if(strs.length==0) return ""; String s=strs[0]; for (int i = 1; i < strs.l
2015-05-02 19:22:19
2367

原创 数组中唯一出现一次的一个,两个,三个数,其余数都是偶数次出现(java版本)
首先在leetcode上面有这样类似的题,做法大致类似1,首先是只出现一次的一个数比较简单,直接全部亦或值就得到了//只出现一次的一个数 public static int singleNumber1(int[] A) { int res=0; for(int i=0;i<A.length;i++) res^=A[i];
2015-05-02 14:06:50
1808
原创 《深入应用c++11》第二章
1,区分c++中的左值与右值 左值是表达式结束后依然存在的持久对象,右值是表达式结束后不再存在的临时对象。 最简单的区分方法是:能对表达式取地址的是左值,不能的是右值 右值=将亡值+纯右值2,常量的左值引用是一个“万能”引用类型,可以接受左值、右值、常量左值和常量右值。3,只有当发生自动类型推导的时候(例如函数模板的类型自动推导,或auto关键字),&&才是一个通用的引用universal r
2018-02-03 18:20:06
601
原创 《深入应用C++11》第一章
1,using可重定义一个模板,该模板既不是类模板也不是函数模板,是一种新的模板形式:模板别名templte <typename T>using func_t=void (*)(T,T);//使用func_t模板func_t<int> xxx_2;2,函数模板的参数在使用上与其他默认函数略不同,它没有必须写在参数表最后的限制。template <typename R = int , typen
2018-02-01 21:13:05
690
原创 c++中的std::bind与std::function
最近在看《深入应用c++11》的时候遇到了std::bind的一些新用法,之前没有遇到过,这里记录下。通常时候std::bind是与std::function一起结合使用的,std::bind是一个函数模板,而std::function是一个类模板,这个从其源码就可看出 /** * @brief Function template for std::bind. * @in
2018-01-21 12:49:39
1252
原创 c++多态中关于参数匹配推导与模板参数推导
在调用一个函数的时候,当参数是基类的时候,有时候传子类对象也是能够正常运行; 在调用模板函数的时候,模板有时候能够自动推导出参数的类型,得到理想的结果,但是很多时候模板参数并不会按我们想象的那样进行推导,从而调用错误;下面是自己遇见的一些小的总结
2017-11-14 21:23:11
871
1
原创 剑指offer[三]:从尾到头打印链表(java和c++版本)
从尾到头打印链表输入一个链表,从尾到头打印链表每个节点的值。 Java版本/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }*
2017-11-12 22:19:37
350
原创 剑指offer[二]:替换空格(java和c++版本)
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。java版本public class Solution {/** * 暴力法的话就没意思 */ public static String replaceSpace(StringBuffer str) {
2017-11-05 15:03:37
533
原创 剑指offer[一]:二维数组中的查找(java和c++版本)
二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 java实现版本public class Solution { public boolean Find(int [][] array,int target) { /**
2017-11-05 14:53:59
726
原创 c++中四种强制类型转换(const_cast、static_cast应用最多)
c++动态类型转换有四种const_cast、static_cast、dynamic_cast、reinterpreter_cast前面两个用的多,但是后面的针对其设计理念有许多其他的实现方法可达到同样的效果 - static_cast (1)用于基本数据类型之间的转换,如把int转换为char,把int转换成enum,但这种转换的安全性需要开发者自己保证(这可以理解为保证数据的精度,即程序员能
2017-10-17 19:32:31
6233
转载 为什么要使用虚函数和 指针(或是引用)才能实现多态?
网上找的 搜集在一起 https://www.cnblogs.com/bofengyu/p/6761389.htmlhttp://blog.youkuaiyun.com/sangyongjia/article/details/50888705https://segmentfault.com/a/1190000004359057http://www.cnblogs.com/0xcafebabe/p/442369...
2017-09-06 23:29:16
937
转载 机器学习和深度学习引用量最高的20篇论文(2014-2017)
机器学习和深度学习引用量最高的20篇论文(2014-2017)2017-04-09 机器之心选自Kdnuggets作者:Thuy T. Pham机器之心编译参与:邵明、黄小天机器学习和深度学习的研究进展正深刻变革着人类的技术,本文列出了自 2014 年以来这两个领域发表的最重要(被引用次数最多)的 20 篇科学论文,以飨读者。
2017-04-09 12:59:18
11790
转载 机器学习路线与资料
作者:寒小阳&&龙心尘 时间:2016年2月。 出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/50759472 http://blog.youkuaiyun.com/longxinchen_ml/article/details/50749614 声明:版权所有,转载请联系作者并注明出处1. 引言也许你和这个叫『机器学习』的
2017-04-07 16:43:18
1528
原创 ReentrantLock可重入锁
1,可重入锁 顾名思义就是支持重进入的锁,它表示该所能够支持一个线程对一个资源的重复加锁。此外,该锁还支持获取锁的时候的公平与非公平选择。 之前构造的独占锁Mutex,代码如下所示:public class Mutex implements Lock{ //静态内部类,自定义同步器 private static class Sync extends AbstractQu
2016-06-06 15:19:02
1023
原创 happens-before知识
1,happens-before定义1),如果一个操作happens-before另一个操作,那么第一个操作结果对第二个操作可见,并且第一个的执行顺序排在第二个操作之前(这里指的是位置在前,具体的内存执行指令谁先进行不一定按这个顺序)2),两个操作存在happens-before关系,并不意味着java平台的具体实现必须按照happens-before关系指定的顺序来执行。如果重排序之后的
2016-05-30 22:13:41
743
原创 线程的单例模式与延迟加载中的Initialization on Demand Holder
面试的时候,常常会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern)吧。好吧,写就写,这还不容易。顺手写一个:public final class EagerSingleton { private static EagerSingleton singObj = new EagerSingleton(); pr
2016-05-24 16:33:20
2390
原创 URL、URLConnection 和HttpURLConnection
在Java程序中,可以创建表示URL地址的URL对象。 URL对象表示一个绝对的URL地址,但URL对象可用绝对URL、相对URL和部分URL构建。URL类中有各种用于获取属性的方法: getProtocol getHost getPort getFile getRef创建使用URL访问互联网上的资源为获得URL的实际比特或内
2016-04-28 18:38:04
1115
原创 HttpClient与httpComponents、HttpPost、HttpGet
jdk自带的url与urlconnection之类的连接网络获取资源的方式在实际的项目中还是有许多的瓶颈,这里就介绍了下apach下的一个子项目HttpClient。 认识HttpClient之前先看看HttpComponents组件1,httpComponents组件结构HttpComponents Core 简称HttpCore, 是一组
2016-04-28 18:35:52
3396
原创 java集合中的fail-fast机制
最初在学习java集合取值的时候,在用迭代器取值的时候,如果中途改变了集合的情况,迭代过程就会报ConcurrentModificationException异常,用例如下: List list = new ArrayList(); list.add("hello" ); list.add("world" ); list.add("java" ); I
2016-04-26 18:04:52
1112
转载 Java IO:阻塞/非阻塞式IO、同步/异步IO
引言同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(cont
2016-04-21 22:57:12
4929
3
原创 华为2016校园招聘题----[编程题]简单错误记录(JAVA版)
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)3.输入的文件可能带路径,记录
2016-04-08 23:43:00
3790
原创 [编程题]数独(JAVA)
数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。输入描述:输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。输出描述:输出九行,每行九个空格隔开的数字,为解出的答案。分析: 这里的数独就是9行9列的数组,满足每一行、每一列、每一个粗线宫内的数字均含1
2016-04-07 23:29:20
19395
6
原创 约瑟夫环的问题与应用(JAVA)
[编程题] 删数有一个数组a[N]顺序存放0-N,要求没隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。输入描述:每组数据为一行一个整数n(小于等于1000),为数组成员
2016-04-07 17:11:21
4620
原创 [编程题] 生成格雷码(JAVA实现)
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。测试样例:1返回:["0","1"]分析:实际就是将二进制数进行合理的排序找规律 /** * n=1 0 1
2016-04-06 22:45:37
1292
原创 java中进制的转换,Byte与16进制的转换
java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有:十进制转成十六进制:String Integer.toHexString(inti)十进制转成八进制String Integer.toOctalString(int
2016-04-05 23:08:01
20340
原创 表示数值的字符串---JAVA版
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。分析: 这题条件有点多,从最后的测试用例可以知道 "600."这种形式是算true的具体的条件是:
2016-03-28 22:31:11
1090
原创 正则表达式匹配-剑指offer(JAVA版)
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 分析:递归实现每次分别在str 和pattern中取一个字
2016-03-28 21:15:04
4036
2
原创 二叉搜索树与双向链表(java版)
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析: 对于二叉搜索树,用中序搜索算法挺适合。考虑每个子树子节点作为三部分,这里以根结点为特殊例子进行阐述递归实现,每次用一个lastNode存放上一个子树的最后一个结点,该结点是上个已排好子树的最大的结点。
2016-03-27 22:18:48
2258
转载 TCP/IP协议三次握手与四次握手流程解析
一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+
2016-03-27 00:02:12
472
原创 链表中环的入口结点
题目描述一个链表中包含环,请找出该链表的环的入口结点。分析:此题说明了单链表中一定有环,且只有一个环,一般做法都是用快慢指针来进行跑,由于有环就不去判断是否有环慢指针速度为1,块指针速度为2,第一次相遇后停止,让慢指针回到头,再次都以速度1开始跑,再次相遇的地点即为链表的环的入口点。数学证明公式如下: 第一次相遇时: 慢
2016-03-26 13:26:00
447
原创 丑数(JAVA)
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析:根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果能被5整除,就除以连续5。如果最后我
2016-03-24 22:52:12
4065
原创 整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数public class Solution { public int NumberOf1
2016-03-23 23:20:14
492
原创 字符串的排列组合
题目来自剑指offer题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。import java.util.ArrayList;
2016-03-23 21:40:41
1171
原创 网易2016软件工程师笔试题-----[编程题] 奖学金(JAVA实现)
小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。输入描述:第一行三个整数n,r,
2016-03-22 16:11:26
2306
转载 从集合的resize看Java HashMap的死循环
问题的症状从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。而且,这个问题在测试环境里可能很难重现。
2016-03-17 17:09:31
2756
转载 从java多线程内存模型说到ConcurrentHashMap
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get
2016-03-17 16:21:23
1557
原创 Vector源码分析
Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector源码剖析 Vector的源码如下(加入了比较详细的注释):
2016-03-16 17:41:35
611
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人