
金典
coolwriter
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
下一个较大元素II
现在有一个数组,请找出数组中每个元素的后面比它大的最小的元素,若不存在则为-1。 给定一个int数组A及数组的大小n,请返回每个元素所求的值组成的数组。保证A中元素为正整数,且n小于等于1000。 测试样例: [11,13,10,5,12,21,3],7 [12,21,12,12,21,-1,-1]class NextElement {public: vector<in...原创 2018-04-28 17:05:18 · 489 阅读 · 0 评论 -
圆圈中最后剩下的数(约瑟夫环)
题目描述 约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。 给定两个int n和m,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。 测试样例: 5 3 返回:4class Joseph {public: int getResult(i...原创 2018-01-30 15:56:36 · 389 阅读 · 0 评论 -
反转字符串
题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。 给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。 测试样例: “Hello world”,”wor原创 2018-01-20 15:03:26 · 191 阅读 · 0 评论 -
叠罗汉一
题目描述 叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。同时我们应该让下面的人比上面的人更高一点。已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人。注意这里的人都是先后到的,意味着参加游戏的人的先后顺序与原序列中的顺序应该一致。 给定一个int数组men,代表依次来的每个人的身高。同时给定总人数n,请返回最多能叠的人数。保证n小于等于500。原创 2018-02-04 17:28:04 · 1512 阅读 · 0 评论 -
排序数组查找
题目描述 有一个NxM的整数矩阵,矩阵的行和列都是从小到大有序的。请设计一个高效的查找算法,查找矩阵中元素x的位置。 给定一个int有序矩阵mat,同时给定矩阵的大小n和m以及需要查找的元素x,请返回一个二元数组,代表该元素的行号和列号(均从零开始)。保证元素互异。 测试样例: [[1,2,3],[4,5,6]],2,3,6 返回:[1,2]class Finder {publ原创 2018-02-04 17:18:18 · 400 阅读 · 0 评论 -
二分法找字符串
题目描述 有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为log级别。 给定一个string数组str,同时给定数组大小n和需要查找的string x,请返回该串的位置(位置从零开始)。 测试样例: [“a”,”b”,”“,”c”,”“,”d”],6,”c” 返回:3class Finder {public:原创 2018-02-04 16:40:40 · 1291 阅读 · 0 评论 -
行列清零
题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。 给定一个N阶方阵int[]”>mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。 测试样例: [[1,2,3],[0,1,2],[0,0,1]] 返回:[[0,0,3],[0,0,0],[0,0,0]]class Cle原创 2018-01-19 22:33:54 · 277 阅读 · 0 评论 -
n皇后问题
题目描述 请设计一种算法,解决著名的n皇后问题。这里的n皇后问题指在一个nxn的棋盘上放置n个棋子,使得每行每列和每条对角线上都只有一个棋子,求其摆放的方法数。 给定一个int n,请返回方法数,保证n小于等于15 测试样例: 1 返回:1class Queens {public: int nQueens(int n) { // write code h原创 2018-01-27 16:35:04 · 311 阅读 · 0 评论 -
硬币表示
题目描述 有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。 给定一个int n,请返回n分有几种表示法。保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。 测试样例: 6 返回:2递归方法int MakeChangeCore(int n,int denom) { int next_denom=0原创 2018-01-27 15:40:37 · 371 阅读 · 0 评论 -
洪水填充
题目描述 在一个nxm矩阵形状的城市里爆发了洪水,洪水从(0,0)的格子流到这个城市,在这个矩阵中有的格子有一些建筑,洪水只能在没有建筑的格子流动。请返回洪水流到(n - 1,m - 1)的最早时间(洪水只能从一个格子流到其相邻的格子且洪水单位时间能从一个格子流到相邻格子)。 给定一个矩阵map表示城市,其中map[i][j]表示坐标为(i,j)的格子,值为1代表该格子有建筑,0代表没有建筑。原创 2018-01-27 14:19:03 · 1336 阅读 · 0 评论 -
矩阵反转
题目描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3 返回:[[7,4,1],[8,5,2],[9,6原创 2018-01-18 17:41:47 · 4778 阅读 · 0 评论 -
压缩字符串
题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。 测试样例 “aabccccca原创 2018-01-18 17:32:53 · 899 阅读 · 0 评论 -
约瑟夫问题2
题目描述 约瑟夫问题是一个著名的趣题。这里我们稍稍修改一下规则。有n个人站成一列。并从头到尾给他们编号,第一个人编号为1。然后从头开始报数,第一轮依次报1,2,1,2…然后报到2的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3…报到2,3的人出局。以此类推直到剩下以后一个人。现在需要求的即是这个人的编号。 给定一个int n,代表游戏的人数。请返回最后一个人的编号原创 2018-01-30 16:15:29 · 743 阅读 · 0 评论 -
维护秩
题目描述 现在我们要读入一串数,同时要求在读入每个数的时候算出它的秩,即在当前数组中小于等于它的数的个数(不包括它自身),请设计一个高效的数据结构和算法来实现这个功能。 给定一个int数组A,同时给定它的大小n,请返回一个int数组,元素为每次加入的数的秩。保证数组大小小于等于5000。 测试样例: [1,2,3,4,5,6,7],7 返回:[0,1,2,3,4,5,6]clas...原创 2018-04-27 10:28:12 · 329 阅读 · 0 评论 -
井字棋
题目描述 对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。三个棋子连成任意直线 给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代表是对方玩家的棋子。 测试样例: [[1,0,1],[1,-1,-1],[1,-1,0]] 返回:trueclass Board {public: bool checkWon...原创 2018-04-27 11:01:11 · 766 阅读 · 0 评论 -
下一个大于的数
题目描述 现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。 给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。 测试样例: [11,13,10,5,12,21,3],7 返回:[13,21,12,12,21,-1,-1]class NextElement {public:...原创 2018-04-28 16:53:23 · 205 阅读 · 0 评论 -
关系运算符加法
题目描述 请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。 给定两个int A和B。请返回A+B的值 测试样例: 1,2 返回:3class UnusualAdd {public: int addAB(int A, int B) { // write code here while(B != 0) { ...原创 2018-04-28 16:13:42 · 285 阅读 · 0 评论 -
树转链表
题目描述 有一个类似结点的数据结构TreeNode,包含了val属性和指向其它结点的指针。其可以用来表示二叉查找树(其中left指针表示左儿子,right指针表示右儿子)。请编写一个方法,将二叉查找树转换为一个链表,其中二叉查找树的数据结构用TreeNode实现,链表的数据结构用ListNode实现。 给定二叉查找树的根结点指针root,请返回转换成的链表的头指针。/*struct ...原创 2018-04-28 15:32:18 · 369 阅读 · 0 评论 -
整数对查找
题目描述 请设计一个高效算法,找出数组中两数之和为指定值的所有整数对。 给定一个int数组A和数组大小n以及需查找的和sum,请返回和为sum的整数对的个数。保证数组大小小于等于3000。 测试样例: [1,2,3,4,5],5,6 返回:2class FindPair {public: int countPairs(vector&l...原创 2018-04-27 16:49:35 · 722 阅读 · 0 评论 -
词频统计
题目描述 请设计一个高效的方法,找出任意指定单词在一篇文章中的出现频数。 给定一个string数组article和数组大小n及一个待统计单词word,请返回该单词在文章中的出现频数。保证文章的词数小于等于1000。class Frequency {public: int getFrequency(vector<string> article, int n, str...原创 2018-04-27 16:02:16 · 1694 阅读 · 1 评论 -
最大连续子序列和
题目描述 对于一个有正有负的整数数组,请找出总和最大的连续数列。 给定一个int数组A和数组大小n,请返回最大的连续数列的和。保证n的大小小于等于3000。 测试样例: [1,2,3,-6,1] 返回:6class MaxSum {public: int getMaxSum(vector<int> A, int n) { // write cod...原创 2018-04-27 15:48:54 · 926 阅读 · 0 评论 -
语音报数
题目描述 有一个非负整数,请编写一个算法,打印该整数的英文描述。 给定一个int x,请返回一个string,为该整数的英文描述。 测试样例: 1234 返回:”One Thousand,Two Hundred Thirty Four”class ToString {public: vector<string> digits = {"", "One", "T...原创 2018-04-27 15:28:00 · 1510 阅读 · 0 评论 -
最小有序调整
题目描述 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。 给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。保证A中元素均为正整数。 测试样例: [1,4,6,5,9,10],6 返回:[2...原创 2018-04-27 14:29:40 · 308 阅读 · 0 评论 -
阶乘尾零
题目描述 请设计一个算法,计算n的阶乘有多少个尾随零。 给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数。 测试样例: 5 返回:1class Factor {public: int getFactorSuffixZero(int n) { // write code here if(n <= 0) ...原创 2018-04-27 12:02:13 · 446 阅读 · 0 评论 -
猜球颜色
题目描述 我们现在有四个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,可能的情况为RGGB(槽1为红色,槽2、3为绿色,槽4为蓝色),作为玩家,你需要试图猜出颜色的组合。比如,你可能猜YRGB。要是你猜对了某个槽的颜色,则算一次“猜中”。要是只是猜对了颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。 给定两个string A和gue...原创 2018-04-27 11:28:55 · 783 阅读 · 0 评论 -
无判断求最大值
题目描述 请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。 给定两个int a和b,请返回较大的一个数。若两数相同则返回任意一个。 测试样例: 1,2 返回:2class Max {public: int getMax(int a, int b) { return((a + b + abs(a - b)) / 2...原创 2018-04-27 11:07:48 · 340 阅读 · 0 评论 -
空格替换
请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。 测试样例: “Mr John Smith”,13 返回:”Mr%20John%20Smith”原创 2018-01-18 16:59:08 · 378 阅读 · 0 评论 -
原串翻转
题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。 测试样例: “This is nowcoder” 返回:”redocwon si sihT”class Reverse {public: st原创 2018-01-18 16:30:12 · 276 阅读 · 0 评论 -
确定字符互异
题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。 测试样例: “aeiou” 返回:True “BarackObama” 返回:False原创 2018-01-18 16:15:45 · 189 阅读 · 0 评论 -
中序遍历下个节点
题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。 给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。/*struct TreeNode { int val; struct TreeNode *left;原创 2018-01-23 22:58:52 · 456 阅读 · 0 评论 -
字符串全排列以及数组全排列
题目描述 编写一个方法,确定某字符串的所有排列组合。 给定一个string A和一个int n,代表字符串和其长度,请返回所有该字符串字符的排列,保证字符串长度小于等于11且字符串中字符均为大写英文字符,排列中的字符串按字典序从大到小排序。(不合并重复字符串) 测试样例: “ABC” 返回:[“CBA”,”CAB”,”BCA”,”BAC”,”ACB”,”ABC”]class Pe原创 2018-01-25 22:11:50 · 621 阅读 · 0 评论 -
堆箱子 叠罗汉
有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须小于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。 给定三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请返回能堆成的最高的高度。保证n小于等于500。 测试样例: [1,1,1],[1,1,...原创 2018-01-27 17:38:34 · 1250 阅读 · 0 评论 -
变位词排序(去除变位词)
题目描述 请编写一个方法,对一个字符串数组进行排序,将所有变位词合并,保留其字典序最小的一个串。这里的变位词指变换其字母顺序所构成的新的词或短语。例如”triangle”和”integral”就是变位词。 给定一个string的数组str和数组大小int n,请返回排序合并后的数组。保证字符串串长小于等于20,数组大小小于等于300。 测试样例: [“ab”,”ba”,”abc”,”cba原创 2018-01-30 16:44:52 · 376 阅读 · 0 评论 -
旋转数组
题目描述 有一个排过序的数组,包含n个整数,但是这个数组向左进行了一定长度的移位,例如,原数组为[1,2,3,4,5,6],向左移位5个位置即变成了[6,1,2,3,4,5],现在对于移位后的数组,需要查找某个元素的位置。请设计一个复杂度为log级别的算法完成这个任务。 给定一个int数组A,为移位后的数组,同时给定数组大小n和需要查找的元素的值x,请返回x的位置(位置从零开始)。保证数组中元原创 2018-01-30 17:02:31 · 219 阅读 · 0 评论 -
判断BST树,查找二叉树
题目描述 请实现一个函数,检查一棵二叉树是否为二叉查找树。 给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树方法一,中序遍历存入vector看是否排好序/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; T原创 2018-01-23 11:54:22 · 687 阅读 · 0 评论 -
二叉树单层节点组成链表
题目描述 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。 给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。/*struct TreeNode { int val; struc...原创 2018-01-22 17:39:42 · 225 阅读 · 0 评论 -
创建二叉查找树,返回最小高度
题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。class MinimalBST {public: TreeNode *buildBST(vectorint> vals,int left,int right) { if (left > ri原创 2018-01-22 16:37:12 · 615 阅读 · 0 评论 -
有向路径检查
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。 给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。/*struct UndirectedGraphNode { int label; vec原创 2018-01-22 15:55:24 · 241 阅读 · 0 评论 -
猫狗收养所
有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。 给定一个操作序列int[][2] ope(C++中为vector>)代表所有事件。若第一个元素为1,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫;若第一个元素为2,则代表有人收养原创 2018-01-22 14:49:48 · 637 阅读 · 1 评论 -
双栈排序
从大到小排列: 原数组push到栈a,栈b为空。此为初始状态。 如果栈为空,栈a顶弹出,压入栈b。如果栈a顶大于栈b顶,接着栈a顶弹出,压入栈b。 如果栈a顶小于栈b顶,则栈a顶弹出,保存为临时变量,一个一个从栈b弹出元素临时移动到栈a,直到这个临时变量大于栈b顶,此时压入栈b,再将刚才移动到栈a的元素弹出恢复压入到栈b。直到栈a为空。class TwoStacks {public:原创 2018-01-21 22:23:31 · 294 阅读 · 0 评论