剑指offer
KID怪盗基德1412
这个作者很懒,什么都没留下…
展开
-
机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?//bfsclass Solutio...原创 2019-04-23 15:03:02 · 80 阅读 · 0 评论 -
翻转子串
题目描述假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world","wo...原创 2019-05-02 10:03:42 · 73 阅读 · 0 评论 -
清除行列
题目描述请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector<vector><int>>),保证n小于等于300,矩阵中的元素为int范围内。</...原创 2019-05-02 09:46:14 · 79 阅读 · 0 评论 -
孩子们的游戏
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去.....原创 2019-04-18 14:58:16 · 69 阅读 · 0 评论 -
矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...原创 2019-04-23 11:23:09 · 77 阅读 · 0 评论 -
矩阵的90度像素翻转
题目描述有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。测试样例:[[1,2,3],[4,5,6],[7,8,9]],3 返回:[[7,4,1],[8,5...原创 2019-05-01 20:40:01 · 192 阅读 · 0 评论 -
基本字符串压缩
题目描述利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例"aabccccc...原创 2019-05-01 20:05:48 · 304 阅读 · 0 评论 -
扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2019-04-18 08:59:17 · 235 阅读 · 0 评论 -
二叉搜索树的第k个节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。很明显这是利用中序遍历的方法/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x)...原创 2019-04-22 16:24:48 · 57 阅读 · 0 评论 -
链式A+B
题目描述有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。给定两个链表ListNode*A,ListNode*B,请返回A+B的结果(ListNode*)。测试样例:{1,2,3},{3,2,1}返回:{4,4,4}/*struct ListNode { int ...原创 2019-05-02 16:00:32 · 97 阅读 · 0 评论 -
链表分割
题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode*pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。//试来试去,只有重新建立一个链表的方法比较快O(n)class Partition {public: ListNode* partition(ListN...原创 2019-05-02 16:03:02 · 103 阅读 · 0 评论 -
洪水问题(bfs应用)
题目描述在一个nxm矩阵形状的城市里爆发了洪水,洪水从(0,0)的格子流到这个城市,在这个矩阵中有的格子有一些建筑,洪水只能在没有建筑的格子流动。请返回洪水流到(n - 1,m - 1)的最早时间(洪水只能从一个格子流到其相邻的格子且洪水单位时间能从一个格子流到相邻格子)。给定一个矩阵map表示城市,其中map[i][j]表示坐标为(i,j)的格子,值为1代表该格子有建筑,0代表没有建筑。...原创 2019-06-23 20:45:26 · 302 阅读 · 0 评论 -
机器人走方格
题目描述有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。给定两个正整数intx,inty,请返回机器人的走法数目。保证x+y小于等于12。测试样例:2,2返回:2class Robot {public: int countWays(int x, int y) { i...原创 2019-05-15 21:01:51 · 165 阅读 · 0 评论 -
链表排序
链表的归并排序/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Li...原创 2019-04-25 09:32:37 · 70 阅读 · 0 评论 -
二叉树输出单层结点(递归和队列两种方法)
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode*root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。Solution 1(采用中序遍历的递归方法)//可以采用前序遍历,到达一定深度...原创 2019-05-04 11:34:09 · 265 阅读 · 0 评论 -
在同一条线上的点的最大个数
Givennpoints on a 2D plane, find the maximum number of points that lie on the same straight line.穷举法: 需要两重循环,第一重循环遍历起始点a,第二重循环遍历剩余点b。 a和b如果不重合,就可以确定一条直线。 对于每个点a,构建 斜率->点数 的map。 ...转载 2019-04-24 09:50:40 · 361 阅读 · 0 评论 -
高度最小的BST(二叉搜索树)
题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[]vals,请返回创建的二叉查找树的高度。//当然最简单方法就是返回log2(vals.size())+1class MinimalBST { struct TreeNode { int val; TreeNod...原创 2019-05-03 19:31:36 · 763 阅读 · 0 评论 -
集合栈
题目描述请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。给定一个操作序列int[][2]ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为po...原创 2019-05-03 15:12:10 · 91 阅读 · 0 评论 -
由后缀表达式求值
题目描述Evaluate the value of an arithmetic expression inReverse Polish Notation.Valid operators are+,-,*,/. Each operand may be an integer or another expression.Some examples: ["2", "1", "+", ...原创 2019-04-23 16:01:02 · 788 阅读 · 0 评论 -
回文链表
题目描述请编写一个函数,检查链表是否为回文。给定一个链表ListNode*pHead,请返回一个bool,代表链表是否为回文。测试样例:{1,2,3,2,1}返回:true{1,2,3,2,3}返回:falseSolution 1//不需要那么复杂,直接转换为字符串,直接判断就可以了class Palindrome {public: bo...原创 2019-05-02 16:11:15 · 67 阅读 · 0 评论 -
左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!Way1:利用递归方法//Recursive,时间复杂度略大class Solutio...原创 2019-04-17 16:06:20 · 85 阅读 · 0 评论 -
序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树题目给的太简单,没读懂!!原文地址:http://www.cnblogs.com/ygj0930/p/6611039.html一:二叉树序列化(持久化) 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。 序列化可以基于 先序、中序、...转载 2019-04-22 11:23:44 · 146 阅读 · 0 评论 -
和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。//Way1:暴力枚举class Solution {public: vector<int> FindNumbersWithSum(vector<int> ...原创 2019-04-17 08:42:50 · 61 阅读 · 0 评论 -
跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。链接:https://www.nowcoder.com/questionTerminal/8c82a5b80378478f9484d87d1c5f12a4来源:牛客网对于本题,前提只有 一次 1阶或者2阶的跳法。a.如果两种跳法,1阶或者2阶,那么假定第一...转载 2019-04-03 17:05:38 · 65 阅读 · 0 评论 -
丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析:链接:https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b来源:牛客网通俗易懂的解释:...转载 2019-04-15 21:31:08 · 77 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。class Solution {public: bool VerifySquenceOfBST(vector<int> s) { if(s.size()<=0) return false; ...原创 2019-04-08 22:10:32 · 54 阅读 · 0 评论 -
求数组里连续子序列和的最大值
转载出处:https://www.cnblogs.com/allzy/p/5162815.html(解释的非常透彻)最好的算法就是利用动态规划来计算(DP[i] = max{DP[i-1] + A[i],A[i]})class Solution {public: int getMaxSubSerial(int arr[],int size) { int ...转载 2019-04-08 09:05:48 · 3771 阅读 · 2 评论 -
两个栈实现一个队列
问题描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty()) { w...原创 2019-04-01 21:35:41 · 65 阅读 · 0 评论 -
由中序序列和前序序列重建二叉树
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solut...原创 2019-04-01 20:57:14 · 191 阅读 · 0 评论 -
顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.Way1:算法来源/* 思想,用左上和右下的坐标定位出一次要旋转打印的数据,一次旋转打印结束...原创 2019-04-05 10:35:54 · 61 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/c...转载 2019-04-04 22:00:44 · 59 阅读 · 0 评论 -
合并链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。原创 2019-04-04 21:32:45 · 806 阅读 · 0 评论 -
整数中1出现的次数
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。分析:对于这类问题,问整数中哪位数出现的次数,我们可以将整个数组元素合...原创 2019-04-12 22:10:59 · 130 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(...原创 2019-04-09 21:01:08 · 62 阅读 · 0 评论 -
和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...原创 2019-04-16 19:35:50 · 55 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2019-04-21 09:32:18 · 64 阅读 · 0 评论 -
判断二叉树是否对称
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(...原创 2019-04-21 08:54:07 · 1372 阅读 · 0 评论 -
数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。//Way1利用lambda表达式比较简洁class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { sort(data.begin...原创 2019-04-16 19:01:55 · 85 阅读 · 0 评论 -
把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。//对vector容器内的数据进行排序,按照 将a和b转为string后// 若 a+b<b+a a排在在前 的规则排序,// 如 2 21 因为 212 < 221 所以 排序后为 21...转载 2019-04-13 14:55:34 · 63 阅读 · 0 评论 -
二叉树的下一个节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析:首先知道中序遍历的规则是:左根右,然后作图 链接:https://www.nowcoder.com/questionTerminal/9023a0c988684a5396...转载 2019-04-20 21:52:16 · 109 阅读 · 0 评论