自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 【剑指offer】面试题50(1):第一个只出现一次的字符

题目在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置思路哈希表代码/** * 题目: * 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 * * 思路: * 哈希表 * * @author peige */public class _50_01_FirstNot

2017-07-31 18:48:21 235

原创 【剑指offer】面试题49:丑数

题目我们把只包含因子2、3 和 5 的数称作丑数(Ugly Number) 求按照从小到大的顺序的第1500个丑数。 例如,6、8都是丑数,但是14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。 思路有空再补上…代码public class _49_UglyNumber { public int GetUglyNumber_Solution(int index) {

2017-07-31 18:25:38 358

原创 【剑指offer】面试题43:1~n整数中1出现的次数

题目输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12, 1~12这些整数中包含1的数字有1、10、11和12,1一共出现了5次。思路思路: 讲道理,我觉得这道题书上讲的思路并不怎样,而且书上讲得挺模糊的。 我自己想了个办法,挺好解决这道题的。 解法: 以21305这个数为例子 万位出现1的情况有:10000-19999, 一共10000次 千位出现1的情况

2017-07-31 15:10:18 496

原创 【剑指offer】面试题41:数据流的中位数

题目如何得到一个数据流中的中位数? 如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 思路这个题目跟一般的固定数目的数组查找中位数不一样,它是数据流。 由于数据是从数据流读出来的,所以数据的数量会随着时间变化而增加。 public class Solution { publ

2017-07-31 14:15:05 739

原创 【剑指offer】面试题40:最小的k个数

题目输入n个整数,找出其中最小的K个数。 例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 ps:题目只要求最小的k个数,没有要求这k个数要排序 思路看下面具体解法的注释解法1/** * 题目: * 输入n个整数,找出其中最小的K个数。 * 例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 * ps:题目只要求最小

2017-07-30 19:16:09 402

原创 【剑指offer】面试题42:连续子数组的最大和

题目输入一个整形数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如,输入的数组为{1, -2, 3, 10, -4, 7, 2, -5},和最大的子数组为{3, 10, -4, 7, 2},因此输出为该子数组的和18。思路看下面的代码注释代码/** * 题目: * HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。

2017-07-30 19:04:23 381

原创 【剑指offer】面试题39:数组中出现次数超过一半的数字

题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路解法1 最直观的解法,用哈希表来做,数字映射出现的次数 时间复杂度O(n),空间复杂度O(n),数组不会乱序解法2 也是很直观的解法,将数组排序后,遍历查看是否有符合条件的数

2017-07-29 03:18:20 420

原创 【剑指offer】面试题:求字符串的所有组合

题目输入一个字符串,打印出该字符串中字符的所有组合。 例如输入三个字符a, b, c,则它们的组合有 a, b, c, ab, ac, bc, abc。 当交换字符串中的字符时,虽然能得到两个不同的排列,但却是同一个组合。比如 ab 和 ba 是不同的排列,但只算一个组合。思路如果输入n个字符,则这n个字符能构成长度为1, 2, …, n的组合。 求n个字符的长度为m(1≤m≤n)的组合的时候

2017-07-29 00:55:47 1872

原创 【剑指offer】面试题38:字符串的排列

题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 ps:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路其实就是对字符串全排列,然后放到 TreeSet 中。 放到TreeSet中解决了两个问题:1.去掉重复字符串,2.按字典序排序 这里讲

2017-07-28 17:26:09 495

原创 【剑指offer】面试题37:序列化二叉树

题目请实现两个函数,分别用来序列化和反序列化二叉树思路使用前序遍历来序列化二叉树,当碰到子节点为null的时候,用特殊字符’$’来表示。代码public class _37_SerializeBinaryTrees { public static class TreeNode { public int val = 0; public TreeNode left

2017-07-28 16:14:26 363

原创 【剑指offer】面试题36:二叉搜索树与双向链表

题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路这题看的时候一脸懵逼…思考的时候还是一脸懵逼,想到了以前的一些思路,然后想到了一个非常复杂的办法,估计编码起来会更痛苦! 然后去看答案,还是一脸懵逼- -。 接下来试着写看看吧,发现超级简单的…几行代码就搞定了。在写完代码的时候感觉思路非常清晰…思路: 使用中序遍历二叉搜索

2017-07-28 03:59:21 377

原创 【剑指offer】面试题35:复杂链表的复制

题目输入一个复杂链表(每个节点中有节点值,以及两个指针, 一个指向下一个节点,另一个特殊指针指向任意一个节点或者null), 返回结果为复制后复杂链表的head。 (注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路解法1(我一开始的想法): 1.先对所有的node进行copy,并用next连接起来。  copy的同时将原node和copy之后的node放在哈希

2017-07-28 02:18:44 365

原创 【剑指offer】面试题34:二叉树中和为某一值的路径

题目输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 思路使用前序遍历,然后用栈保存路径,并统计当前路径的sum。 当某个节点已经不在路径内,这个节点要出栈,并从sum中减去对应的值。 ps:因为打印路径的时候需要遍历这个栈,所以这个栈结构最好能遍历。代码/** * 题目: * 输入一棵二叉树

2017-07-28 01:21:52 292

原创 Java中Integer的运算,自动装箱机制

因为之前做的C++,现在做Java的时候,经常忘记掉一切皆是对象这个概念。现在正在慢慢改善… 今天在写个测试代码,如下所示: public static void main(String[] args) { Integer i1 = 5; Integer i2 = i1; i1 += 6; System.out.println(i1 + " " + i2);}我

2017-07-27 22:25:43 1080 1

原创 【剑指offer】面试题33:二叉搜索树的后序遍历序列

题目输入一个整数数组,判断该数组是不是某二叉搜索树的后续遍历结果。 如果是则返回true,否则返回false。 假设输入的数组的任意两个数字互不相同。 例如: 输入数组{5, 7, 6, 9, 11, 10, 8},则返回true, 因为这个整数序列是下面这个二叉搜索树的后序遍历结果。 如果输入的数组是{7, 4, 6, 5},则由于没有 哪棵二叉搜索树的后序遍历结果是这个序列,因此返

2017-07-27 16:57:37 396

原创 【剑指offer】面试题32(3):之字形打印二叉树

题目请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路刚看到这个题目的时候,感觉很简单,还是用之前的做法,用队列来实现,然后用一个辅助栈,来对偶数行的进行压栈并出栈放到队列中。但是这个做法并不是最好的,代码实现起来较为复杂 更好的做法: 使用两个栈来解决这个问题。我们在打印某一层的节点时,把下一层的

2017-07-27 15:31:26 292

原创 【剑指offer】面试题32(2):分行从上到下打印二叉树

题目从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路用队列来保存要打印的节点。 同时我们需要两个变量:一个变量表示在当前层中还没有打印的节点数;另一个变量表示下一层节点的数目。代码public class _32_02_PrintTreesInLines { public static class TreeNode { public int val = 0

2017-07-27 01:52:16 873

原创 【剑指offer】面试题32(1):从上往下不分行打印二叉树

题目从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路很直观,用队列解决代码public class _32_01_PrintTreeFromTopToBottom { public static class TreeNode { public int val = 0; public TreeNode left = null; publi

2017-07-27 01:32:21 633

原创 【剑指offer】面试题31:栈的压入、弹出序列

题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路这道题思路还是挺简单的 用一个辅助栈来解决,把压入序列的数字依次压入该辅助栈,并按照第二个

2017-07-26 23:04:21 367

原创 【剑指offer】面试题30:包含min函数的栈

题目定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路用一个值来保存最小值是行不通的,因为栈pop操作后,最小值就变了。 但是可以使用另外一个栈minStack来保存最小值。 每次push操作时,将当前最小值与新元素对比得出新的最小值,同时push进minStack。 每次pop操作时,两个栈同时pop。 代码public class _30_MinInStack {

2017-07-26 21:59:56 318

原创 【剑指offer】面试题29:顺时针打印矩阵

题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如,如果输入如下矩阵: 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. 思路 采用上图的方式进行遍历,每次遍历一个矩形需要四个循环。 按照 上->右->下->左 的方式

2017-07-26 21:31:56 345

原创 【剑指offer】面试题23:链表中环的入口节点

题目一个链表中包含环,请找出该链表的环的入口节点。思路先判断链表中是否包含环 (node1,node2指向头结点,node1每次向前移动1步,node2每次向前移动2步,若出现node1==node2,则有环,若node2==null,则无环)若链表中存在环,则统计环的节点个数count寻找环的入口节点 (node1,node2指向头结点,node1先向前移动count步,然后node1和

2017-07-23 23:02:25 509

原创 【剑指offer】面试题20:表示数值的字符串

题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。 解题时犯的错误我在提交的时候错了三次: 1.第一次挂:-.123应该输出true(错在不懂得有这种情况) 2.第二次挂:12e应该输出f

2017-07-23 01:55:19 707 1

原创 【剑指offer】面试题19:正则表达式匹配

题目请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配。思路代码测试

2017-07-22 14:49:27 585

原创 【剑指offer】面试题28:对称的二叉树

题目请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路看下面的代码注释代码/** * 题目: * 请实现一个函数,用来判断一颗二叉树是不是对称的。 * 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 * * 思路: * 从根节点的左右两个子节点出发 * 左子节点采用 根左右 的方式遍历 * 右子节点采用

2017-07-21 23:24:23 504

原创 【剑指offer】面试题27:二叉树的镜像

题目操作给定的二叉树,将其变换为源二叉树的镜像。思路求一棵树的镜像的过程:先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有的左右子节点之后,就得到了树的镜像。代码/** * 操作给定的二叉树,将其变换为源二叉树的镜像。 * 二叉树的镜像定义: * 源二叉树: * 8 * / \ * 6 10

2017-07-21 20:22:41 394

原创 【剑指offer】面试题26:树的子结构

题目输入两棵二叉树A,B,判断B是不是A的子结构。 (ps:我们约定空树不是任意一个树的子结构) 思路找到树A中与树B根节点值相同的节点,设树A中该节点为subRoot在遍历树B的同时,遍历subRoot,如果遍历完树B发现subRoot中没有与B不一致的地方,则B是A的子结构遍历树B时,发现subRoot中有与树B结构不一致的地方,则退出遍历重复步骤1,找到树A中与树B根节点下一个值相

2017-07-21 17:26:11 306

原创 【剑指offer】面试题25:合并两个排序的链表

题目输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 例如: 链表1:1->3->5->7 链表2:2->4->6->8 合并后:1->2->3->4->5->6->7->8 思路太简单了,就不说了 主要还是考察代码的鲁棒性 考虑空指针的情况 代码public static class ListNode { public int val; p

2017-07-21 16:24:08 633

原创 【剑指offer】面试题24:反转链表

题目定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点思路很简单,单纯考察代码的鲁棒性 要针对区分成以下三种情况处理: 1.输入的链表头指针为null 2.输入的链表只有一个节点 3.输入的链表有多个节点(正常情况)代码public static class ListNode { public int val; public ListNode next =

2017-07-21 16:02:05 300

原创 【剑指offer】面试题22:链表中的倒数第k个节点

题目输入一个链表,输出该链表中倒数第k个节点。 为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有6个节点,从头结点开始,它们的值以此是1、2、3、4、5、6。 这个链表的倒数第3个节点是值为4的节点。 思路定义两个节点node1,node2 让node1一开始指向第k个节点,node2指向第1个节点 此时node1和node2同时前进,[nod

2017-07-20 23:40:35 319

原创 【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面

题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路在代码注释里面代码/** * 题目: * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序, * 使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分, * 并保证奇数和奇数,偶数和偶数之间的相

2017-07-20 23:39:15 312

原创 【剑指offer】面试题18:删除链表中重复的节点

题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路1.用tmpNode和current指向头结点,用一个flag标志遇到连续的重复值 2.current用来遍历整个链表,在遍历时,每当遇到一个新的值的节点,就用tmpNode指向整个节点 3.直到遇到下一个新的值前,c

2017-07-20 17:37:36 361

原创 【剑指offer】面试题17:打印从1到最大的n位数

题目输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999。思路例如输入数字3 可以当成排列如下数字: 000 001 002 … 997 998 999 即打印出数字的全排列。 所以可以递归求解 代码public static void Print1ToMaxOfNDigits_1(int n) { if(n <= 0

2017-07-19 23:04:23 474 1

原创 【剑指offer】代码的完整性

从3个方面确保代码完整性1.功能测试合法的输入2.边界测试例如: 最大正数,最大负数,0等 循环或递归的边界条件 3.负面测试非法的输入3种错误处理方式1.函数用返回值来告知调用者是否出错这种方式最大的问题是使用不便,因为函数不能直接把计算结果通过返回值赋值给其他变量,同时也不能把这个函数计算的结果直接作为参数传递给其他函数。(不知道为什么这么说?有朋友解释一下吗?)2.当错误发生时设置 一个

2017-07-19 21:36:22 440

原创 【剑指offer】面试题16:数值的整数次方

题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路在代码注释里代码/** * 题目: * 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 * * 思路: * public double Power(double base, int exp) * 即 bas

2017-07-19 20:26:03 307

原创 【剑指offer】面试题15:二进制中1的个数

题目请实现一个函数,输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示。例如,把9表示成二进制是1001,有2位是1。因此,如果输入9,则该函数输出2。思路输入一个int型的整数,int是32位的 将这个数每次右移一位,与1做与操作 一共右移32次,即可得到答案代码public static int NumberOf1(int n) { int count = 0;

2017-07-19 20:15:58 467

原创 【剑指offer】面试题14:剪绳子

题目给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1,m>1), 每段绳子的长度记为 k[0], k[1], k[2], …, k[m]。 请问 k[0] * k[1] * k[2] * … * k[m] 可能的最大乘积是多少? 例如,当绳子的长度为8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 思路1.使用动态规划求解,当长度为n时,设最大乘积为f

2017-07-19 13:42:57 1103

原创 【剑指offer】面试题13:机器人的运动范围

题目地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路这道题跟面试题12:矩阵中的路径的思路是差不多的,

2017-07-19 11:07:48 371

原创 【剑指offer】面试题12:矩阵中的路径

题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如在下面的3*4矩阵 a b t g c f c s j d e h 矩阵中包含一条字符串”bfce”的路径,但是矩阵中不包含”abfb”路径,因为字符

2017-07-19 01:26:20 994

原创 【剑指offer】面试题:变态跳台阶

题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路跳上1级台阶有1种跳法(1) 跳上2级台阶有2种跳法(1-1、2) 跳上3级台阶有4种跳法(1-1-1、1-2、2-1、3) 设跳上n级台阶有f(n)种跳法 f(n)种方法包括: 1. 跳上1级台阶后直接跳上n级台阶 2. 跳上2级台阶后直接跳上n级台阶 3. 跳上3级

2017-07-18 23:16:32 504

MFC不规则窗口制作

MFC不规则窗口的制作,让你的界面更炫酷,参考各种音乐播放器之类。

2015-07-24

空空如也

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

TA关注的人

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