
JAVA
lingongheng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
哈希表
1.HashTable和HashMap的区别关于MAP的总结(摘自http://blog.youkuaiyun.com/chenssy/article/details/37909815)原创 2016-07-30 15:21:23 · 221 阅读 · 0 评论 -
剑指offer_整数中1出现的次数
题目: 求1~n的数字中,数字1出现的次数。 最无脑的做法,从1遍历到n,累计每个数字中1出现的次数。。。。 在leetcode上看到最牛逼的做法 先上代码再说:public int countDigitOne(int n) { int ones = 0; for (long m = 1; m <= n; m *= 10) ones +=原创 2016-10-04 21:39:16 · 315 阅读 · 0 评论 -
剑指offer_把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 曾经遇到这题,当时的想法很脑残,把每个整数拆分成一个个数字,依次放到数组中,然后比较各个数组。。。。。。。。。。。。。。至少当时已经明白3>32 (因为332>323)正确思路:将每个原创 2016-10-04 22:22:10 · 278 阅读 · 0 评论 -
剑指offer_丑数
题目: 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 解题思路:参考程序员面试金典P190每次将第n个丑数A存入列表时,利用其他三个列表Q2,Q3,Q5分别存储A*2,A*3,A*5. 找出三个列表中最小的元素,将它作为下一个丑数。 重复原创 2016-10-05 09:22:04 · 347 阅读 · 0 评论 -
剑指offer_第一个只出现一次的字符
题目描述在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置。时间复杂度O(n):遍历一次字符串,将字符与其出现的次数记录在HashMap中;再遍历一次字符串,第一次检测到其在HashMap中记录的次数为1时,输出当前位置。代码:import java.util.*; public class Solution { public i原创 2016-10-05 09:48:31 · 2207 阅读 · 0 评论 -
剑指offer_数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007.解题思路:这题目在于测试用例数组超大,不能也不用取余输出啊。首先想到排序,因为如果存在逆序对,在升序排序中,总要做点什么对吧。因为数组超大,想到 递归、分治。快排?归并?堆排?归并才是这题的原创 2016-10-05 13:38:17 · 461 阅读 · 0 评论 -
剑指offer_两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。解题思路:遇到这种题目,瞬间想到HashMap…用一个HashMap依次记录第一个链表的结点; 遍历第二个链表结点,一旦在HashMap中找到,直接输出。 就是这么简单粗暴无脑。类似的题目还有 两个字符串 找到第一个相同的字符等等,用HashMap特别好解的题目有一下这些:(不定期补充) 剑指offer_第一个只出现一次的字符剑指offer_数原创 2016-10-05 14:42:10 · 304 阅读 · 0 评论 -
剑指offer_和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 解题思路关键在于这个数组是递增的!用两个数字start和end分别表示数组的开始位置与结束位置。 如果两数相加之和大于S,则end–; 如果两数相加之和小于S,则start++; 第一次找到的两数就是要找的,能够保证其乘积最小。比较简单,代码:import原创 2016-10-05 19:48:00 · 423 阅读 · 0 评论 -
MyBatis、JDBC、Hibernate区别
从层次上看,JDBC是较底层的持久层操作方式,而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。从功能上看,JDBC就是简单的建立数据库连接,然后创建statement,将sql语句传给statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历操作来获取数据;Hibernate原创 2016-09-26 20:37:25 · 6790 阅读 · 0 评论 -
剑指offer_输入n个整数,找出其中最小的K个数
最小的K个数 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 本题无非就是排序,取前K个值。但选什么排序算法呢?基于堆排序算法,构建最大堆。时间复杂度为O(nlogk); 如果用快速排序,时间复杂度为O(nlogn); 如果用冒泡排序,时间复杂度为O(n*k);这类题目要考的应该是原创 2016-10-04 20:52:46 · 3295 阅读 · 0 评论 -
剑指offer_数组中出现次数超过一半的数字
这题不难,记录的原因是:该题我用到了HashMap来记录每个出现的数字以及出现的次数。在一些笔试面试中,总会出现 类似问题,但都会告诉你数组超大,有成千上万的数据量(网易云音乐播放排行榜、百度搜索排行榜等等),此时用HashMap来解决实在完美,在这里有点大材小用了。。。。。。。 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,原创 2016-10-04 19:47:53 · 3905 阅读 · 0 评论 -
堆与栈的区别
堆和栈的区别。分为数据结构的堆和栈、内存的堆和栈。1.数据结构的堆和栈数据结构的栈常与队列放在一起,栈是先进后出,队列先进先出。数据结构的堆与堆排序相关。堆与树相似,在堆排序中,常用到最大堆的概念,通常我们所说的堆的数据结构,是指二叉堆。2.内存的堆和栈堆栈空间分配 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系原创 2016-07-30 15:47:02 · 376 阅读 · 0 评论 -
内存管理
内存泄漏在C程序中使用malloc()分配内存,使用free()来释放内存,当未释放不再使用的内存时就会出现“内存泄漏”在C++程序中使用new()分配内存,使用delete()释放内存,当未释放不再使用的内存时就会出现“内存泄漏”在Java程序中栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆(操作系统): 一般由程序员分配释放, 若程原创 2016-08-03 14:55:31 · 426 阅读 · 0 评论 -
String.equals用法注意
param.getType().equals("String")与"String".equals(param.getType())的区别第二个代码能避免 param.getType() 为空的情况原创 2016-09-07 16:24:49 · 458 阅读 · 0 评论 -
找出某个String中出现次数最多的字符,并输出次数(字符较长)
利用HashMap。 K 对应每一个字符;V对应相应的出现次数。可用此思想解决 大数据情况下对 榜单音乐、搜索次数最多的词、等等的排序代码如下import java.util.HashMap; import java.util.Map;/** * Created by 功恒 on 2016/9/26 0026. */ public class Mostchar { public st原创 2016-09-26 23:53:35 · 3082 阅读 · 0 评论 -
HashSet TreeSet 中元素顺序问题(未解决)
TreeSet HashSet 元素顺序:在书上看到: HashSet实现了Set接口,使用Hash表来保存元素,因此不能保证元素的获取顺序; TreeSet 能对保存的元素进行排序。如果没有指定的排序方式,则按自然顺序排序,对于自然数就是升序排序。上机测试,与上述有出入。 测试代码:import java.util.*; public class Test { public sta原创 2016-10-01 15:33:51 · 1405 阅读 · 0 评论 -
剑指offer_输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 此前在苏宁笔试中遇到到这题,当时认为二叉搜索树均为满二叉树,故在递归过程中,对数组的划分是以满二叉树的特性进行划分。大错特错!本题是利用递归思想,判断根节点的左子树元素是否小于根节点,右子树元素是否大于根节点。重点在于对左右子树的划分(因为传原创 2016-10-04 15:53:43 · 3403 阅读 · 0 评论 -
剑指offer_输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
1、矩阵打印 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13原创 2016-10-02 21:56:31 · 6361 阅读 · 3 评论 -
剑指offer_输入一个字符串,按字典序打印出该字符串中字符的所有排列
字符串的排列 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 解题思路:1.列出所有字符串用递归求解。 对于n个字符串的排列问题。如果能生成n - 1个元素的全部排列结果,就能生成n个元素的全部排列结果。原创 2016-10-04 17:37:36 · 8507 阅读 · 0 评论 -
剑指offer_输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 注意:1.路径的定义:从树的根结点开始往下一直到叶结点2.树的遍历3.路径的保存:每次找到路径之后,应将路径保存到 ArrayList<ArrayList<Integer>> result 中,原创 2016-10-04 15:46:52 · 4106 阅读 · 0 评论