自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer_和为S的两个数字

题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 解题思路关键在于这个数组是递增的!用两个数字start和end分别表示数组的开始位置与结束位置。 如果两数相加之和大于S,则end–; 如果两数相加之和小于S,则start++; 第一次找到的两数就是要找的,能够保证其乘积最小。比较简单,代码:import

2016-10-05 19:48:00 397

原创 剑指offer_两个链表的第一个公共结点

题目描述输入两个链表,找出它们的第一个公共结点。解题思路:遇到这种题目,瞬间想到HashMap…用一个HashMap依次记录第一个链表的结点; 遍历第二个链表结点,一旦在HashMap中找到,直接输出。 就是这么简单粗暴无脑。类似的题目还有 两个字符串 找到第一个相同的字符等等,用HashMap特别好解的题目有一下这些:(不定期补充) 剑指offer_第一个只出现一次的字符剑指offer_数

2016-10-05 14:42:10 272

原创 剑指offer_数组中的逆序对

题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007.解题思路:这题目在于测试用例数组超大,不能也不用取余输出啊。首先想到排序,因为如果存在逆序对,在升序排序中,总要做点什么对吧。因为数组超大,想到 递归、分治。快排?归并?堆排?归并才是这题的

2016-10-05 13:38:17 429

原创 剑指offer_第一个只出现一次的字符

题目描述在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置。时间复杂度O(n):遍历一次字符串,将字符与其出现的次数记录在HashMap中;再遍历一次字符串,第一次检测到其在HashMap中记录的次数为1时,输出当前位置。代码:import java.util.*;public class Solution { public i

2016-10-05 09:48:31 2171

原创 剑指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 320

原创 剑指offer_把数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 曾经遇到这题,当时的想法很脑残,把每个整数拆分成一个个数字,依次放到数组中,然后比较各个数组。。。。。。。。。。。。。。至少当时已经明白3>32 (因为332>323)正确思路:将每个

2016-10-04 22:22:10 243

原创 剑指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 282

原创 剑指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 3251

原创 剑指offer_数组中出现次数超过一半的数字

这题不难,记录的原因是:该题我用到了HashMap来记录每个出现的数字以及出现的次数。在一些笔试面试中,总会出现 类似问题,但都会告诉你数组超大,有成千上万的数据量(网易云音乐播放排行榜、百度搜索排行榜等等),此时用HashMap来解决实在完美,在这里有点大材小用了。。。。。。。 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,

2016-10-04 19:47:53 3864

原创 剑指offer_输入一个字符串,按字典序打印出该字符串中字符的所有排列

字符串的排列 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 解题思路:1.列出所有字符串用递归求解。 对于n个字符串的排列问题。如果能生成n - 1个元素的全部排列结果,就能生成n个元素的全部排列结果。

2016-10-04 17:37:36 8430

原创 剑指offer_输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。此前在苏宁笔试中遇到到这题,当时认为二叉搜索树均为满二叉树,故在递归过程中,对数组的划分是以满二叉树的特性进行划分。大错特错!本题是利用递归思想,判断根节点的左子树元素是否小于根节点,右子树元素是否大于根节点。重点在于对左右子树的划分(因为传

2016-10-04 15:53:43 3365

原创 剑指offer_输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径

二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 注意:1.路径的定义:从树的根结点开始往下一直到叶结点2.树的遍历3.路径的保存:每次找到路径之后,应将路径保存到 ArrayList<ArrayList<Integer>> result 中,

2016-10-04 15:46:52 4070

原创 剑指offer_输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

1、矩阵打印 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13

2016-10-02 21:56:31 6306 3

原创 HashSet TreeSet 中元素顺序问题(未解决)

TreeSet HashSet 元素顺序:在书上看到: HashSet实现了Set接口,使用Hash表来保存元素,因此不能保证元素的获取顺序; TreeSet 能对保存的元素进行排序。如果没有指定的排序方式,则按自然顺序排序,对于自然数就是升序排序。上机测试,与上述有出入。 测试代码:import java.util.*;public class Test { public sta

2016-10-01 15:33:51 1360

空空如也

空空如也

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

TA关注的人

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