
剑指offer-java
Deen12520
分享知识 分享快乐
展开
-
链表问题合集
一.前言链表是一种常见的基础数据结构,也是面试笔试中常常碰到的题目. 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。由于不必按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点原创 2017-09-06 17:44:53 · 899 阅读 · 0 评论 -
面试题 18: 树的子结构
一. 题目 输入两棵二叉树A和B,判断B是不是A的子结构.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;/**难度系数:*** * 剑指offer: 树的子结构 * 方法:递归,第一次判断找到根节点一样的节点,第二步比较左右子树结构是否相同,递归终止条件到达 * A或B的叶节点 * 测试用例:功能测试(是子结构/不是子结构/其中一棵树为空/单节点)原创 2017-07-09 10:40:51 · 545 阅读 · 0 评论 -
面试题 13: 在O(1)时间删除链表节点
一. 题目给定单向链表的头指针和一个节点指针,定义一个函数在O(1) 时间删除该节点.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;/**难度系数:*** * 剑指offer: 在O(1)时间删除链表节点 * 方法: O(1)时间,不遍历前序结点,复制覆盖 * 测试用例:功能测试(链表有多个结点/1个结点/为空/删除头结点/中间结点/尾结点) * @原创 2017-07-09 10:35:17 · 639 阅读 · 0 评论 -
面试题 51: 数组中重复的数字
一. 题目在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字.例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3.代码请到我的代码库中下载 Point2Offer二. 代码package week_6;/**难度系数:*** * 剑指off原创 2017-07-30 10:16:04 · 677 阅读 · 0 评论 -
面试题 34: 丑数
一. 题目我们把只包含因子 2,3和5的数称作丑数.求按从小到大的顺序的第1500个丑数.例如6,8 都是丑数,但14不是,因为它包含因子7.习惯上我们把1看成第一个丑数.代码请到我的代码库中下载 Point2Offer二. 代码public class No34 { public static void main(String[] args) { test(); }原创 2017-07-16 09:26:52 · 996 阅读 · 0 评论 -
面试题 30 : 最小的K个数
一. 题目输入n个整数,找出其中最小的k个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字为1,2,3,4.代码请到我的代码库中下载 Point2Offer二. 代码package week_5;/**难度系数:**** * 剑指offer: 最小的K个数 * 方法: 快排思想/最大堆 * 测试用例: (有无重复数字,K=1,K=length/K<1或K>length)原创 2017-07-16 09:23:55 · 868 阅读 · 0 评论 -
面试题 25: 二叉树中和为某一值的路径
一. 题目输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从数的根节点开始往下一直到叶节点所经过的节点形成一条路径.代码请到我的代码库中下载 Point2Offer二. 代码package week_5;import java.util.ArrayList;/**难度系数:*** * 剑指offer: 二叉树中和为某一个值的路径 * 方法: 熟悉二叉搜索树的概念,左子树所原创 2017-07-16 09:21:02 · 857 阅读 · 0 评论 -
面试题 24: 二叉搜索树的后序遍历序列
一. 题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同.代码请到我的代码库中下载 Point2Offer二. 代码package week_5;/**难度系数:*** * 剑指offer: 二叉搜索树的后序遍历序列 * 方法: 熟悉二叉搜索树的概念,左子树所有结点小于根节点,右子树所有结点都大于根原创 2017-07-16 09:16:30 · 823 阅读 · 0 评论 -
面试题 21: 包含min函数的栈
一. 题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min 函数.在该栈中,调用min,push 及pop的时间复杂度都是O(1).代码请到我的代码库中下载 Point2Offer二. 代码package week_5;import java.util.Stack;/**难度系数:*** * 剑指offer: 包含min函数的栈 * 方法: 建一个辅助栈,存最小值 * 测试用原创 2017-07-16 09:11:04 · 652 阅读 · 0 评论 -
面试29: 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.原创 2017-06-18 15:55:04 · 319 阅读 · 0 评论 -
面试题 19: 数的镜像
一. 题目请完成一个函数,输入一个二叉树,该函数输出它的镜像.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;/**难度系数:*** * 剑指offer: 树的镜像 * 方法:前序遍历,交换左右子树 * 测试用例:功能测试(正常树/树为空/单节点/只有左子树或右子树) * @author dingding * Date:2017-7-3 10:35原创 2017-07-09 10:44:35 · 665 阅读 · 0 评论 -
面试题 20: 顺时针打印矩阵
一. 题目输入一个矩阵,按照从外到里以顺时针的顺序依次打印出每一个数字.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;/**难度系数:*** * 剑指offer: 顺时针打印矩阵 * 方法: 找规律 * 测试用例:数组只有一行,一列,一行一列,二行二列,多行多列,为空 * @author dingding * Date:2017-7-8 14:1原创 2017-07-09 10:47:40 · 1370 阅读 · 0 评论 -
面试题 22: 栈的压入,弹出序列
一. 题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5 是某栈的压栈序列,序列4,5,3,2,1是该栈对应的一个弹出序列,但4,3,5,1,2 就不不能是该栈的弹出序列.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;import java.util.Stack;/原创 2017-07-09 10:59:23 · 804 阅读 · 0 评论 -
二叉树问题合集
一.前言二叉树是一种常见的基础数据结构,也是面试笔试中常常碰到的题目. 二叉树(英语:Binary tree)是每个节点最多只有两个分支(不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”和“右子树”。二叉树的分支具有左右次序,不能颠倒。二叉查找树,可实现对元素的快速查找,对二叉树的理解也是学习其他树结构的基础.二. 二叉树结构class BinaryTree{ int va原创 2017-09-11 15:40:50 · 970 阅读 · 0 评论 -
举一反三: 最长连续子串问题
题目给定一序列,如{1,2,3,4,5},求其连续子序列的和能被K整除的子序列的最长长度. 注: 连续子序列,即在序列中连续访问的数. 序列{1,2,3,4,5},其满足条件的序列为{2,3},{5},{1,2,3,4},{1,2,3,4,5},故满足条件的最长子序列为,{1,2,3,4,5},长度为5.思路思路1: 滑动窗口的思想,遍历全部子序列. 代码如下://解法1:遍历所有的子序列,滑原创 2017-09-01 13:33:35 · 1269 阅读 · 0 评论 -
最长公共子串等最字问题
一. 前言最近做笔试题,碰到了很多”最”类型的题,像 最长公共子串|最长公共子序列|最长递增子序列|最长连续子数组的最大和| 添加(删除)元素,使其成为和最小的回文序列|添加最少元素,使其成为回文串. 鉴于他们之间有些存在一些共性,故在这里做个总结.二. “最” 字题型最长公共连续子串最长公共子序列最长递增子序列最长连续子数组的最大和添加(删除)元素,使其成为和最小的回文序列添加最少元素原创 2017-09-22 17:38:33 · 775 阅读 · 0 评论 -
最低公共祖先问题(LCA) 举一反三
算法总是美的,充满着magic.一.前言给定一棵树,同时给出树中的两个结点或者两个以上节点,求它们的最低公共祖先。这就是常见的LCA(Lowest Common Ancestor )问题。二.两个节点的LCA问题常规解法1.1 思路 下面是一个简单的复杂度为 O(n) 的算法,解决LCA问题 1) 找到从根到n1的路径,并存储在一个向量或数组中。 2)找到从根到n2的路径,并存储在一个向量或原创 2017-09-13 18:43:14 · 859 阅读 · 0 评论 -
面试题 45: 圆圈中最后剩下的数字
一. 题目0,1,2,…,n-1 这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字.求这个圆圈里剩下的最后一个数字.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;/**难度系数:*** * 剑指offer: 圆圈中最后剩下的数字 * 方法: f(n,m) = [f(n-1,m)+m]%n; n>1 * 测试用例:功能测试(0个数字,原创 2017-07-10 12:39:51 · 547 阅读 · 0 评论 -
面试题 44: 扑克牌的顺子
一. 题目从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.大小王可看做任意数字.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;/**难度系数:*** * 剑指offer: 扑克牌的顺子 * 方法: 排序,计算大小王的个数,注意有对子,肯定不是顺子 * 测试用例:功能测试(不含王是顺子,含王是顺子,全是王或四个王,含有对子,不是顺子,原创 2017-07-10 12:39:29 · 754 阅读 · 0 评论 -
面试题 37: 两个链表的第一个公共结点
一. 题目输入两个链表,找出它们的第一个公共结点.代码请到我的代码库中下载 Point2Offer二. 代码优快云-markdown编辑器.html有不妥当之处,麻烦告知:D原创 2017-07-10 12:39:09 · 780 阅读 · 1 评论 -
面试题 33: 把数组排成最小的数
一. 题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321} ,则打印出这3个数字能排成的最小数字321323. 代码请到我的代码库中下载 Point2Offer二. 代码package week_4;/**难度系数:*** * 剑指offer: 把数组排成最小的数 * 方法: 整数转为字符串,然后进行字符串比较大小,进原创 2017-07-10 12:38:43 · 494 阅读 · 0 评论 -
面试题 23: 从上到下打印二叉树
一. 题目从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印代码请到我的代码库中下载 Point2Offer二. 代码package week_4;import java.util.LinkedList;import java.util.Queue;/**难度系数:*** * 剑指offer: 从上到下打印二叉树 * 方法:BFS * 测试用例:功能测试(正常树/树为空/单节原创 2017-07-10 12:38:15 · 534 阅读 · 0 评论 -
面试题 35: 第一个只出现一次的字符
一. 题目一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度为O(n),空间复杂度是O(1).代码请到我的代码库中下载 Point2Offer二. 代码package ween_2;import java.util.LinkedHashMap;/** * 剑指offer: 在字符串中找出第一个只出现一次的字符. * 方法:1.比较,O(n^原创 2017-06-27 14:54:02 · 502 阅读 · 0 评论 -
面试 42-1:翻转单词顺序
一. 题目输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串”I am a student.”,则输出”student. a am I”.代码请到我的代码库中下载 Point2Offer二. 代码package ween_2;/** * 剑指offer: 翻转单词顺序 * 方法:两次翻转,第一次翻转整个句子,第二次翻转单词原创 2017-06-27 15:08:07 · 476 阅读 · 0 评论 -
面试题40: 数组中只出现一次的数字
一. 题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1).代码请到我的代码库中下载 Point2Offer二. 代码package week_3;/**难度系数:*** * 剑指offer: 数组中只出现一次的数字 * 方法:异或运算,给数组分组(根据异或之后的第一个1) * 测试用例:功能测试(原创 2017-07-02 09:26:01 · 649 阅读 · 0 评论 -
面试题 6: 重建二叉树
一. 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序编列序列{4,7,2,1,5,3,8,6},则重建出图所示的二叉树并输出它的头结点.代码请到我的代码库中下载 Point2Offer二. 代码package week_3;/**难度系数:**** * 剑指off原创 2017-07-02 09:31:35 · 339 阅读 · 0 评论 -
面试题 7: 两个栈实现一个队列
一. 题目用两个栈实现一个队列,并完成在队列尾部插入结点和在队列头部删除结点的功能.代码请到我的代码库中下载 Point2Offer二. 代码package week_4;import java.util.Stack;/**难度系数:** * 剑指offer: 两个栈实现一个队列 * 方法: 队尾插入,队头删除 * 测试用例:功能测试(空的队列添加删除,非空的添加删除,连续删除置为空) *原创 2017-07-11 08:08:41 · 1079 阅读 · 0 评论 -
面试题17: 合并两个排序的链表
一. 题目输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.代码请到我的代码库中下载 Point2Offer二. 代码package com;/** * 剑指offer: 合并两个排序的链表 * 方法:1.使用两个指针,递归实现; * 测试用例:功能测试(两个链表都有多个节点,节点的值互不相等或者存在值相等的多个节点) * 特殊输入测试(一个或两个链表为空,一个链原创 2017-06-18 15:49:52 · 809 阅读 · 0 评论 -
面试16: 反转链表
一. 题目定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点.代码请到我的代码库中下载 Point2Offer二. 代码package com;/** * 剑指offer: 链表反转 * 两种方法求解:1.遍历;2.递归. * 测试用例三种(链表有多个节点,一个节点和链表为空) * @author dingding * Date:2017-6-14 9:55 * D原创 2017-06-18 15:44:58 · 290 阅读 · 0 评论 -
面试题15: 链表中倒数第k个结点
一. 题目输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6. 这个链表的倒数第3个结点是值为4的结点.代码请到我的代码库中下载 Point2Offer二. 代码package com;import java.util.Scanner;/** * 剑指offer原创 2017-06-18 15:37:59 · 306 阅读 · 0 评论 -
面试题5: 从尾到头打印链表
一. 题目输入一个链表的头结点,从尾到头反过来打印出每个节点的值.代码请到我的代码库中下载 Point2Offer二. 代码package com;import java.util.Stack;/** * 剑指offer: 从尾到头输出列表 * 两种考虑:1.不改变链表结构(栈,递归);2.改变链表结构(遍历/递归,见链表反转,这里不考虑) * 测试用例三种(链表有多个节点,一个节点核链表为空原创 2017-06-18 15:23:12 · 550 阅读 · 0 评论 -
面试题9:斐波那契数列
一. 题目写一个函数,输入n,求斐波那契数列的第n项.代码请到我的代码库中下载 Point2Offer二. 代码内含传统解法和优化后的解法.package com;import java.util.Scanner;/** * 剑指offer: 斐波那契数列 * 方法:最优递归, * 测试用例:功能测试(输入3,5,7) * 边界值测试(0,1,2) * 性能测试(输入较大的数字:40,50原创 2017-06-18 15:16:49 · 328 阅读 · 0 评论 -
面试题4: 替换空格
一. 题目请实现一个函数,把字符串中的每个空格替换成”%20”. 例如输入”We are happy.”, 则输出”We%20are%20happy.”代码请到我的代码库中下载Point2Offer二. 代码package com;/** * 剑指offer: 替换字符串中的每个空格为02% * 方法:1.replaceAll;2.移动字符串;3.使用两个指针; * 测试用例:功能测试(字符原创 2017-06-18 15:08:54 · 405 阅读 · 0 评论 -
面试题 32: 从1到n 整数中1出现的次数
一. 题目输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次.代码请到我的代码库中下载 Point2Offer二. 代码package week_3;/**难度系数:***** * 剑指offer: 从1到n整数中1出现的次数 * 方法: 数字规律 * 测试用例:功能测试(0,1(边界值),5,原创 2017-07-02 09:20:55 · 337 阅读 · 0 评论 -
面试题31: 连续子数组的最大和
一. 题目输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).代码请到我的代码库中下载 Point2Offer二. 代码package week_3;/**难度系数:*** * 剑指offer: 连续子数组的最大和 * 方法:利用当前累加子数组和最大值or动态规划(未实践) * 测试用例:功能测试(全正数组,全原创 2017-07-02 09:14:53 · 354 阅读 · 0 评论 -
面试题 11:数值的整数次方
一. 题目实现函数double Power(double base,int exponent),求base 的exponent 次方.不得使用库函数,同时不需要考虑大数问题.代码请到我的代码库中下载 Point2Offer二. 代码package ween_2;/**难度系数:*** * 剑指offer: 数值的整数次方 * 方法:考虑指数为负和底数为0 * 测试用例:功能测试(指数为正,指数原创 2017-06-27 15:33:56 · 344 阅读 · 0 评论 -
面试 42-2: 左旋转字符串
一. 题目字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如输入字符串”abcdefg”和数字2,该函数将返回左旋转2位得到的结果”cdefgab”.代码请到我的代码库中下载 Point2Offer二. 代码package ween_2;/** * 剑指offer: 左旋转字符串:前面若干字符移到尾部 * 方法:和前面反转的方法类似,分原创 2017-06-27 15:02:57 · 325 阅读 · 0 评论 -
面试题 10: 二进制中1的个数
一. 题目请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2.代码请到我的代码库中下载 Point2Offer二. 代码package ween_2;/**难度系数:** * 剑指offer: 二进制中1的个数 * 方法:位运算 * 测试用例:功能测试(正数{121,1,0x7FFFFFFF},负数(0x800原创 2017-06-27 15:26:34 · 278 阅读 · 0 评论 -
面试题 49: 把字符串转换为整数
一. 题目如题.代码请到我的代码库中下载 Point2Offer二. 代码package ween_2;/** * 剑指offer: 字符串转换为整数. * 方法:考虑多种特殊输出 * 测试用例:功能测试(输入的字符串表示正数,负数和0) * 边界值测试(最大的正整数,最小的负整数) * 特殊输入测试(空指针,字符串为空,字符串中含有非数字字符) * @author dingding原创 2017-06-27 15:13:03 · 383 阅读 · 0 评论 -
面试题 38: 数字在排序数组中出现的次数
一. 题目统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5} 和数字3,由于3在这个数组中出现了4次,因此输出4.代码请到我的代码库中下载 Point2Offer二. 代码package ween_2;/**难度系数:*** * 剑指offer: 数字在排序数组中出现的次数 * 方法:二分查找 * 测试用例:功能测试(不存在,存在1次,多次,最大值,最小值)原创 2017-06-27 17:56:50 · 410 阅读 · 0 评论