剑指Offer笔试题(2)

剑指Offer笔试题(1)

题目来源:牛客网

题目一 调整数组序列使奇数位于偶数序列前

描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

解题思路: 代码
要求:奇数和奇数,偶数和偶数的相对位置不变

  • 解法一: 从最后面开始,两个两个比较,如果遇到相邻两个数左边的是偶数,右边的是奇数,则互换位置;否则换下一个; 时间复杂度较高O(n^2);
  • 解法二: 在新建两个数组,分别存放奇数和偶数,一次遍历后将奇偶分开存入数组,然后在将两个数组中的数据返回,时间复杂度较低,但是空间复杂度较高;(未给出代码)

题目二 链表中倒数第k个节点

描述:
输出链表中倒数第k个节点;

解题思路: 代码

  • 解法一: 使用栈,该方法会消耗较大资源,不建议使用;
  • 解法二: 先复制两个节点,第一个节点从头走到k的位置; 然后两个节点以前执行.next,当第一个节点走到链表尾时,第二个节点即走到倒数k的位置;(该解法时间复杂度只有O(n),目前为止最佳解法)

题目三 反转链表

描述:
输入一个链表,反转链表后,输出链表的所有元素。
代码

题目四 合并两个排序的链表

描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

解题思路: 代码

  • 定义一个新的链表listnode;
  • 判断list1和list2的val值,那个小就让listnode的next指向哪个节点;
  • 使用递归,将list1和list2的值全部遍历;本题不难,常规的递归;

题目五 树的子结构

描述:
输入两颗二叉树A,B,判断B是不是A的子结构。

解题思路:代码
依旧递归:使用两次递归;

  • 在树A中找到和B的根节点的值一样的结点R;第一次递归
  • 第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构; 第二次递归

题目六 二叉树的镜像

描述:
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:二叉树的镜像定义:
源二叉树
8
/ \
6 10
/ \ /
5 7 9 11
镜像二叉树
8
/
10 6
/ \ / \
11 9 7 5

解题思路: 代码
千年递归:

  • 从叶子节点互换;
  • 使用递归,从下往上开始交换;

题目七 顺时针打印矩阵

描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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,右下角元素减1;
  • 按照第一步的方法打印第二圈元素;
  • 直到左上角元素坐标值大于右下角坐标值;

题目八 包含min函数的栈

描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数;

解题思路: 代码

  • 使用两个栈,data栈存需要存储的元素,min栈存小元素;
  • push栈的时候,元素存进data栈,如果该元素小于上一个存入的元素,则存入min栈,否则不如min栈;
  • pop:如果data栈和min栈pop出的元素不等,则再将min栈pop出的元素push进去;该步是为了防止min元素被pop出;
  • top函数为了将min元素移动到栈顶;
  • min函数均是得到最小元素,得到pop后在push进去,类似与peek()函数;

题目九 栈的压入、弹出序列

描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

解题思路: 代码

  • 按照栈的压入顺序将元素依次压入栈;
  • 入栈过程中同时按照弹出顺序出栈,如果栈顶元素等于出栈的顺序元素,则,出栈;
  • 执行完成后,判断栈是否为空,如果为空,则表示该序列为栈的弹出序列;

题目十 从上往下打印二叉树

描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

解题思路:代码
该题目即为二叉树的层序遍历: 使用队列解决;

  • 将二叉树的跟节点赋给LinkedList<TreeNode>队列;
  • 在队列出队的同时将左右两子树分别入队;
  • 队列出队完成即得到层序遍历;

题目十一 二叉搜索树的后序遍历序列

描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

解题思路:代码

  • 二叉搜索数,左子树的值都小于右子树的值;
  • 后序遍历,数组最后一个数字为跟节点;
  • 得到跟节点后,可以将数组前n-1个数分为左右两部分,左部分的数值均小于右部分的值;
  • 递归,3中得到的左右两部分数值均可以按照2,3步骤重复执行;
  • 若递归后全部判断正确,则返回true;

题目十二 二叉树中和为某一值的路径

描述:
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

解题思路:代码
从头结点开始,使用递归的方法分别向左向右遍历,看是否存在某条路径所有的结点值相加等于该target.
查看代码中控制台输出的值则可理解栈的应用.

剑指Offer笔试题(3)
以上代码全部托管在 Github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 总结 想清楚再编码 分析方法:举例子、画图 第1节:画图分析方法 对于二叉树、二维数组、链表等问题,都可以采用画图...
    M_巴拉巴拉阅读 1,180评论 0 7
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,016评论 0 12
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 1,107评论 1 1
  • 最近在准备一些暑期实习的笔试和面试,在牛客网上面做了一些题,现在整理出来供大家参考,希望和大家共同学习!题目不难,...
    Torang阅读 2,350评论 3 11
  • 剑指Offer笔试题(4) 题目来源:牛客网 题目一 扑克牌顺子 描述: LL今天心情特别好,因为他去买了一副扑...
    Torang阅读 1,307评论 0 4