自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构:排序算法

排序算法<<插入排序>>*直接插入排序*思想 每次取剩下的一个元素插入到已经有序的序列中.代码public static void InsertSort(int[] arr){ if(arr == null || arr.length == 0){ System.err.println("ERROR INPUT"); return

2016-07-15 10:48:04 1049

原创 Hadoop实战:MapReduce应用实例

参考:hadoop实战一.WordCount任务:统计文件中单词的频率代码:package mapreduce;import java.io.IOException;import java.util.Iterator;import java.util.StringTokenizer;import org.apache.hadoop.conf.*;import org.apache.ha

2016-07-10 16:52:38 10446

原创 Hadoop学习笔记:(一)WordCount运行

前言:本文是在hadoop已经配置好的情况下WordCount是hadoop下的HelloWorld程序,是初学者必须要会的。下面是用eclipse进行开发一、工程与MapReduce代码 新建工程,创建WordCount class 下面的代码是旧版mapreducepackage mapreduce;import java.io.IOException;import java.u

2016-07-10 10:51:15 1054

原创 牛客网程序员面试金典:1.2——原串翻转(java实现)

问题描述: 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。 测试样例: “This is nowcoder” 返回:”redocwon si sihT”思路1: 直接首尾交换即可public Str

2016-07-09 13:25:10 973

原创 牛客网程序员面试金典:1.1确定字符互异(java实现)

问题描述: 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。 测试样例: “aeiou”返回:True “BarackObama”返回:False思

2016-07-09 11:11:40 976

原创 剑指Offer:面试题34——丑数(java实现)

问题描述: 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路1:(显然是比较耗时的) 直接去判断每个整数是不是丑数,然后找到第N个小的数。(牛客网提交超时)public int GetUglyNumber_Solution(int index) {

2016-07-09 10:13:06 999

原创 剑指Offer:面试题33——把数组排成最小的数(java实现)(未完待续)

问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路1: 最直接的做法就是先求出这个数组中的所有数字的全排列,然后把每个排列拼起来,最后求出i拼起来的数字的最小值。思路2: 1.找到一种排序规则,数组根据这个排序规则能拍成一个最小的数字比如m与n

2016-07-09 09:22:06 121

原创 剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)

问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次。思路:(不考虑时间效率的解法,肯定不是面试官期望的) 直观想法:累加1到n中每个整数中1出现的次数。 每个整数中1出现的次数可以由除以10和模10来计算得到。代码如下:boolean invalidInput = fals

2016-07-08 17:10:40 467

原创 剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)

问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次。思路:(不考虑时间效率的解法,肯定不是面试官期望的) 直观想法:累加1到n中每个整数中1出现的次数。 每个整数中1出现的次数可以由除以10和模10来计算得到。代码如下:boolean invalidInput = fals

2016-07-08 17:10:20 2336

原创 剑指Offer:面试题31——连续子数组的最大和(java实现)

问题描述 : 输入一个整数数组,数组里面有正数也有负数。数组中一个或连续几个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)思路1:常规解法,不知道怎么描述了。。代码:boolean invalidInput = false; public int FindGreatestSumOfSubArray(int[] array) { if(array =

2016-07-08 16:32:05 669

原创 剑指Offer:面试题30——最小的k个数(java实现)

问题描述: 输入n个整数,找出其中最小的k个数思路1: 先排序,再取前k个 时间复杂度O(nlogn)下面给出快排序的代码(基于下面Partition函数的方法)public void QuickSort(int[] arr, int start, int end){ if(start == end){ return; } int index

2016-07-08 16:05:00 1661

原创 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)

PS:在前几天的面试中,被问到了这个题。然而当时只能用最低效的方法来解。问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路1: 低效的做法:直接用哈稀表来存储<key, value>,并找出出现次数value大于等

2016-07-08 11:34:50 2184 4

原创 剑指Offer:解决难题时的三大方法

1.画图 让抽象的东西变得直观生动起来。比如设计二叉树,链表,栈,队列这些数据结构时。2.举例子 同样可以化抽象为直观。能够更清晰的展现思路。从例子归纳出一般做法。3.分解 有时问题本身是比较复杂的,但是它可以分解成几个简单的部分。思路通常是使用分治法,动态规划等方法。

2016-07-08 10:02:52 851

原创 剑指Offer:面试题28——字符串的排列(java实现)(待序)

问题描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 思路: 全排列,固定第一位,剩余的部分继续全排列。代码:

2016-07-07 21:40:59 451

原创 剑指Offer:面试题27——二叉搜索树与双向链表(java实现)

问题描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路: 将树分为三部分:左子树,根结点,右子树。 1.我们要把根结点与左子树的最大结点连接起来 2.要把根结点与右子树的最小结点连接起来。代码:(本来按照书上的写的代码,可是得到的结果不对)(下面的代码是他人的代码)/**public class T

2016-07-07 20:11:00 972

原创 剑指Offer:面试题26——复制复杂的链表(java实现)

问题描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。思路1: 1.先复制链表节点,并用next链接起来。 2.然后对每一个结点去修改它的随机指针S。遍历链表找到S。 时间复杂度O(n^2)思路2: 1.先复制链表节点N-N’,并用next链接起来,并用一个哈系表存储《N, N‘》结点对, 2.然后对每

2016-07-07 17:44:19 1119

原创 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)

问题描述: 输入一棵二叉树和一个整数,打印出二叉树中结点指的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int

2016-07-07 17:10:03 705

原创 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)

问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。思路: 1.首先后序遍历的结果是[(左子树的后序)(右子树的后序)根结点],那么我们首先找到了根结点的值, 2.其次,我们知道二叉搜索树的性质是:任何结点的左子树的值小于根结点的值,小于右子树的值。 3.因此,从后向前遍历

2016-07-07 15:49:47 498

原创 剑指Offer:面试题23——从上往下打印二叉树(java实现)

问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路: 按照层次遍历的方法,使用队列辅助。 1.将根结点加入队列。 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若有右子树,将其加入队列。 3.直到队列为空,表明已经打印完所有结点。代码:import java.util.ArrayList;import java.util.Queue

2016-07-07 15:03:17 2338

原创 剑指Offer:面试题22——栈的压入,弹出序列(java实现)

题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 思路: 遍历待测试序列,如果当前元素在栈顶,出栈即可,否则,查看是否所有待入栈元素已入栈,如是说明当前元素在栈里面

2016-07-07 11:46:12 2248

原创 剑指Offer:面试题21——包含min函数的栈(java实现)

问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1).思路:加入一个辅助栈用来存储最小值集合(这里要注意题目并没有说栈内的元素类型,因此要尽量通用)import java.util.Stack;public class Solution { Stack s1=new Stack();

2016-07-07 10:58:28 1056

原创 剑指Offer:面试题20——顺时针打印矩阵(java实现)

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路1(自己想的): 每次打印一行矩阵,然后将剩余的部分

2016-07-07 10:06:00 3786

原创 剑指Offer:面试题19——二叉树的镜像(java实现)

问题描述: 操作给定的二叉树,将其变换为源二叉树的镜像。 二叉树结点定义为:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}例如:

2016-07-07 08:54:37 973

原创 写代码时注意的几点

一.规范性书写清晰布局清晰命名合理 命名尽量使用有意义的单词; 变量常用i,j,k命名; 函数常用f,h,g命名。二.完整性完成基本功能考虑边界条件 做好错误处理对应的考虑好三个测试功能性测试 边界测试 容错测试 三.鲁棒性采取防御式编程 处理无效的输入

2016-07-06 17:12:25 409

原创 剑指Offer:面试题18——树的子结构(java实现)

问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}思路1:

2016-07-06 17:04:36 1038

原创 剑指Offer:面试题17——合并两个排序的链表

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val <= p2.val,则p3把p1指向的结点加入h3,p1后移动。反之,对p2进行对应操作。代码:(未验证正确性,提交时显示超时,所以不知道功能是否实现,还是仅仅时间复杂度高?)public

2016-07-06 16:45:06 644

原创 剑指Offer:面试题16——反转链表(java实现)

问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。链表结点如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}思路:

2016-07-06 15:52:51 4643 2

原创 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

问题描述 输入一个链表,输出该链表中倒数第k个结点。(尾结点是倒数第一个)结点定义如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}思路1: 先遍历链表,计算其长度length; 然后计算出倒数第

2016-07-06 15:50:35 553

原创 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)

问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这个数,然后把它后面的数字都往前面移动一位,这样最后空出一位放该偶数即可。但显然这样会重复移动很多次。时间复杂的O(n^2) 2.在前后安排两个哨兵i,j,前面的用来指示偶数(即扫描如果是奇

2016-07-06 15:29:57 3404 2

原创 链表:删除链表中重复的结点(java实现)

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5代码如下:未进行优化 public class ListNode { int val; ListNode next = null; ListNode(int val) { t

2016-07-06 12:08:28 1125

原创 剑指Offer:面试题13——在O(1)时间删除链表结点

问题描述: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:public class ListNode{ int value; ListNode next; public ListNode(int v){value = v;}}思路:常规的做法就是遍历链表找到被删除结点的前趋p,然后改变p->next的指向即可。但是

2016-07-06 11:27:41 701

原创 剑指Offer:面试题12——打印1到最大的n位数(java实现)

问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999.思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可。public static void Print1ToMaxOfNDigits_1(int n){ int number = 1; int i = 0; while(i++ < n){

2016-07-06 11:07:28 6249

原创 剑指Offer:面试题11——数值的整数次方(java实现)

题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题思路:本题的重点考察内容是代码的完整性,要综合考虑输入的合法性,边界值等等,同时也可以进行优化实现一:public double Power(double base, int exponent){ double res

2016-07-06 10:15:27 507

原创 剑指Offer:面试题8——旋转数组的最小值(java实现)

题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入 一个递增排序的数组的一个旋转输出 旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路: 1.直接遍历一次数组,即可得出最小值。时间复杂度O(n) 2.由于原数组是

2016-07-06 09:52:56 941

原创 剑指Offer:面试题7——用两个栈实现队列(java实现)

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。首先定义两个栈Stack<Integer> stack1 = new Stack<Integer>();//作为进队的端口Stack<Integer> stack2 = new Stack<Integer>();//作为出对的端口思路:两个栈,有两个端口,那么肯定一个是用来入队的,另一个用来出队的。同时,

2016-07-05 13:31:59 3028

原创 剑指Offer:面试题6——重建二叉树(java实现)

问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不包含重复的数字。例如:输入:前序{1,2,4,7,3,5,6,8},中序{4,7,2,1,5,3,8}输出:相应的树根结点思路1:递归。前序遍历:根(左子树)(右子树) 中序遍历:(左子树)根(右子树)先从前序遍历剥出 根结点 然后从中序遍历中剥出:左子树和右子树,递归建立子树,并与根结

2016-07-05 12:40:37 580

原创 剑指Offer:面试题5——从尾到头打印链表(java实现)

问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值。首先定义链表结点public class ListNode { int val; ListNode next = null; ListNode(int val){ this.val = val; } }思路1:此题明显想到是利用栈的思想,

2016-07-05 12:07:55 724

原创 剑指Offer:面试题4——替换空格(java实现)

问题描述:请实现一个函数,把字符串中的每个空格替换成”%20“。例如: 输入:“We are happy.” 输出:”We%20are%20happy.”思路:按顺序找出空格所在的位置(下标),然后利用字串相加,将去除空格的字串用“%20”连接起来/** * 面试题4:替换空格 * @param str * @return */ public st

2016-07-05 10:47:23 583

原创 剑指Offer:面试题3——二维数组中的查找(java实现)

问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.思路:取数组中的元素与目标整数比较,相等则返回true,小于则 查找当前元素的右方和下方,大于则查找当前元素的左方和上方,然而这两个区域有重叠部分,就不容易处理。然而如果我们从数组的角落选取元素与目标整数对比,则就不会出现重叠

2016-07-05 10:24:07 944

空空如也

空空如也

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

TA关注的人

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