![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer
掉下个小石头
jump jump jump...
展开
-
剑指offer—连续子数组的最大和
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/4题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量原创 2015-10-04 23:45:56 · 654 阅读 · 0 评论 -
剑指offer—数组中重复的数字
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。解析:利用计数排序的思想class Solut原创 2015-10-08 21:15:48 · 615 阅读 · 0 评论 -
剑指offer—把字符串转换成整数
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。解析:在学习python的map和reduce函数的时候,就用这两个函数实现字符串转整数。这里我的思路还是用这两个函数的思路。class Solution {public: int StrToInt(string str) {原创 2015-10-08 21:12:40 · 538 阅读 · 0 评论 -
剑指offer—求1+2+3+...+n
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解析:没啥难度,就是用普通的递归就可以,只不过普通的需要判断n==0的时候不再递归,这里利用一下&&,当&&前面的逻辑值为假则不再执行&&后面的代码。class Soluti原创 2015-10-08 21:09:06 · 709 阅读 · 0 评论 -
剑指offer—把二叉树打印成多行
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解析:这个跟按行打印一样的思路即可。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int原创 2015-10-08 21:39:36 · 611 阅读 · 0 评论 -
剑指offer—删除链表中重复的结点
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解析:做这道题目给我的感觉是跟链表反转一样,需要考虑节点之间指针指向的细节问题。由于节点值重复的要全部删除,因此需要保存一个节点指针指向上一原创 2015-10-08 21:30:32 · 674 阅读 · 1 评论 -
剑指offer—二维数组的查找
二维数组中的查找 参与人数:5700 时间限制:1秒 空间限制:32768K 通过比例:17.32% 题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解析:想减少计算量,一个容易的思路就是利用二维数组已经排好的顺序,在目标值边界寻找。下面是我的代码。# -*- co原创 2015-09-30 19:21:17 · 383 阅读 · 0 评论 -
剑指offer—从头到尾打印链表
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:4432 时间限制:1秒 空间限制:32768K 通过比例:16.56%题目描述 输入一个链表,从尾到头打印链表每个节点的值。/*** struct ListNode {* int val;* struct ListNode *next;* ListNo原创 2015-09-30 19:31:14 · 518 阅读 · 0 评论 -
剑指offer—重建二叉树
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:2561 时间限制:1秒 空间限制:32768K 通过比例:18.30%题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二原创 2015-09-30 19:35:17 · 670 阅读 · 0 评论 -
剑指offer—用两个栈实现队列
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:3167 时间限制:1秒 空间限制:32768K 通过比例:34.74%题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解析:我的思路是用一个栈来储存数据,入队的话直接在这个栈上入栈,出队的话借助辅助栈,对辅助栈入栈,然后取出头元素,然后把辅助栈上的元素在入到原创 2015-09-30 19:40:05 · 422 阅读 · 0 评论 -
剑指offer—矩形覆盖
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:3567 时间限制:1秒 空间限制:32768K 通过比例:31.69%题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解析:动态规划,还记得跳台阶么?# -*- coding:utf-8 -*-class Sol原创 2015-09-30 19:55:11 · 742 阅读 · 0 评论 -
剑指offer—数值的整数次方
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:2586 时间限制:1秒 空间限制:32768K 通过比例:25.01%题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解析:课本里面指数定义。class Solution {public: double Power(dou原创 2015-09-30 20:11:37 · 381 阅读 · 0 评论 -
剑指offer—反转链表
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:2707 时间限制:1秒 空间限制:32768K 通过比例:26.37%题目描述 输入一个链表,反转链表后,输出链表的所有元素。解析:只要细心,还是比较简单的,因为只需要调整节点next指针即可。实现的时候用三个节点指针,记录链表上连续的三个节点地址。调整的时候把中间节点的指针指向上一个节点地址。依次循环原创 2015-09-30 20:32:19 · 483 阅读 · 0 评论 -
剑指offer—合并两个排序的链表
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:2342 时间限制:1秒 空间限制:32768K 通过比例:25.34%题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解析:实际上就是归并排序。数组的话会更简单,可以随机访问,在最后设置一个flag为最大值即可。链表的话想要遍历一遍就完成,只能进行为原创 2015-09-30 20:35:34 · 409 阅读 · 0 评论 -
剑指offer—树的子结构
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:1903 时间限制:1秒 空间限制:32768K 通过比例:17.72%题目描述 输入两颗二叉树A,B,判断B是不是A的子结构。解析:解决树类问题的时候递归是一个很好的解决方案,并且写的程序简单,理解起来也很容易。递归的时候谢了一个函数来判断当前两个根节点对应的子树是否相等(IsSubTree),不想等就原创 2015-09-30 23:31:24 · 419 阅读 · 0 评论 -
剑指offer—构建乘积数组
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。解析:用两个数组分别保存i以前和以后所有元素的乘积。然后计算输出向量的每个元素。class Solution {public:原创 2015-10-08 21:17:39 · 564 阅读 · 0 评论 -
剑指offer—字符流中第一个不重复的字符
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。解析:用一个数组记录每个字符出原创 2015-10-08 21:21:03 · 529 阅读 · 0 评论 -
剑指offer—孩子们的游戏(圆圈中最后剩下的数)
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 每年六一儿童节,NowCoder都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为NowCoder的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m的那个小朋友要出列唱首歌,然后可以在礼品箱中任意原创 2015-10-08 21:06:22 · 561 阅读 · 0 评论 -
剑指offer—正则表达式匹配
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/13题目描述: 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配解析: 这道题原创 2015-10-14 22:12:06 · 742 阅读 · 0 评论 -
剑指offer—滑动窗口的最大值
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/13题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1原创 2015-10-13 17:21:34 · 680 阅读 · 0 评论 -
剑指offer—表示数值的字符串
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/13题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。解析:由于种类太多,题目的例子不一定能覆盖全部,就自己写吧。第原创 2015-10-13 20:22:24 · 717 阅读 · 0 评论 -
剑指offer—机器人的运动范围
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/12题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19原创 2015-10-12 22:06:02 · 585 阅读 · 0 评论 -
剑指offer—序列化二叉树
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/12题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树解析:已知根据树的前序遍历和中序遍历序列可以还原出二叉树( http://blog.csdn.net/zhangzhengyi03539/article/details/48831659 ,即可求解。struct TreeNode { int val原创 2015-10-12 12:01:20 · 515 阅读 · 0 评论 -
剑指offer—数据流中的中位数
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/12题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。解析:利用插入排序的思想,将进流中的数据排序。寻找中位数。class Solution{public: vect原创 2015-10-12 23:54:41 · 573 阅读 · 0 评论 -
剑指offer—矩阵中的路径
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/9题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bc原创 2015-10-09 13:34:07 · 690 阅读 · 0 评论 -
剑指offer—二叉搜索树的第k个结点
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。解析:我的思路是对二叉树中序遍历。/*struct TreeNode { int val; struct TreeNode *left; st原创 2015-10-08 21:41:32 · 520 阅读 · 0 评论 -
剑指offer—按之字形顺序打印二叉树
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解析:与前面遇到的哪个按行打印二叉树类似,区别是这里设置的flag不用移动,从左往右访问是先左子树后右子树,从右往左访问的时候先右子树后左子树即可。/*struct原创 2015-10-08 21:37:56 · 520 阅读 · 0 评论 -
剑指offer—对称的二叉树
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解析:递归即可。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;原创 2015-10-08 21:34:26 · 525 阅读 · 0 评论 -
剑指offer—二叉树的下一个结点
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解析:分情况,看是否存在右子树using namespace std;/*struct TreeLinkNode { int val; struct Tree原创 2015-10-08 21:32:20 · 472 阅读 · 0 评论 -
剑指offer—链表中环的入口结点
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/8题目描述 一个链表中包含环,请找出该链表的环的入口结点。解析:链表中包含环的话,必有两个节点的next指针指向环的入口节点。我的思路是使用set./*struct ListNode { int val; struct ListNode *next; ListNode(int x) :原创 2015-10-08 21:24:40 · 676 阅读 · 0 评论 -
剑指offer—二叉树的镜像
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:2198 时间限制:1秒 空间限制:32768K 通过比例:29.88%题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11原创 2015-09-30 23:41:39 · 379 阅读 · 0 评论 -
剑指offer—顺时针打印矩阵
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/9/30参与人数:1586 时间限制:1秒 空间限制:32768K 通过比例:15.43%题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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原创 2015-09-30 23:46:19 · 422 阅读 · 0 评论 -
剑指offer—从上往下打印二叉树
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/3参与人数:1869 时间限制:1秒 空间限制:32768K 通过比例:24.97%题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。解析:这题特别简单,只需要设置一个flag标志为换行符即可。然后广度优先搜索。/*struct TreeNode { int val; struct T原创 2015-10-03 22:41:15 · 419 阅读 · 0 评论 -
剑指offer—二叉搜索树的后序遍历序列
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/3参与人数:1567 时间限制:1秒 空间限制:32768K 通过比例:20.91%题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解析:二叉搜索树后序遍历,所以最后一个元素是这颗子树的根节点,然后由于左子树小于树根,原创 2015-10-03 22:47:02 · 428 阅读 · 0 评论 -
剑指offer—字符串的排列
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/4参与人数:1170 时间限制:1秒 空间限制:32768K 通过比例:15.26%题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述: 输入一原创 2015-10-04 10:31:30 · 759 阅读 · 0 评论 -
剑指offer—最小的K个数
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/4参与人数:1481 时间限制:1秒 空间限制:32768K 通过比例:17.00%题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解析:基于插入排序的思想可以想到使用一个长度为k的排序数组储存最小的k个元素,复杂度O(nk)。基于堆原创 2015-10-04 12:31:47 · 411 阅读 · 0 评论 -
剑指offer—扑克牌顺子
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/5题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,原创 2015-10-05 21:41:59 · 463 阅读 · 0 评论 -
剑指offer—翻转单词顺序列
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/5题目描述 JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.原创 2015-10-05 21:40:07 · 486 阅读 · 0 评论 -
剑指offer—左旋转字符串
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/5题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解析:先把字符串复制一原创 2015-10-05 21:38:44 · 453 阅读 · 0 评论 -
剑指offer—数组中只出现一次的数字
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/10/5题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解析: 数组中只有一个数字出现一次,其它数字出现两次(偶数次)—异或 数组中只有一个数字出现一次,其它数字出现N次—按位对N取余 数组中有两个数字出现一次,其它数字出现两次(偶数次)—异或,找到这两个数的异或值,然原创 2015-10-05 21:32:41 · 423 阅读 · 0 评论