![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法--程序员面试金典
nupt_kwz
学习ing
展开
-
程序员面试金典:双栈排序、二叉平衡检查、输出单层节点
学习并总结了牛客网上的《程序员面试经典》的部分算法题原创 2017-05-23 22:20:24 · 424 阅读 · 1 评论 -
程序员面试金典:上楼梯、机器人走方格I
1.上楼梯题目描述有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。测试样例:1返回:1原创 2017-07-22 14:59:46 · 767 阅读 · 0 评论 -
程序员面试金典:集合栈、用两个栈实现队列
1.集合栈题目描述请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[][](C++为vector<vector<int>>),为完成所有原创 2017-07-17 10:24:49 · 291 阅读 · 0 评论 -
程序员面试金典: 最近公共祖先、二叉树中和为某一值的路径
1.最近公共祖先题目描述有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:2.二叉树中和为某一值的路径原创 2017-07-19 21:16:48 · 234 阅读 · 0 评论 -
程序员面试金典: 二进制插入、二进制小数
1.二进制插入题目描述有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始。给定两个数int n和int m,同时给定int j和int i,意义如题所述,请返回操作后的数,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。测试样例:2.二进制小数题目描述原创 2017-07-19 21:17:19 · 260 阅读 · 0 评论 -
程序员面试金典:最接近的数、整数转化
1.最接近的数题目描述有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。测试样例:2返回:[1,4]2.整数转化原创 2017-07-19 21:17:48 · 792 阅读 · 1 评论 -
程序员面试金典:找出缺失的整数、碰撞的蚂蚁
1.找出缺失的整数题目描述数组A包含了0到n的所有整数,但其中缺失了一个。对于这个问题,我们设定限制,使得一次操作无法取得数组number里某个整数的完整内容。唯一的可用操作是询问数组中第i个元素的二进制的第j位(最低位为第0位),该操作的时间复杂度为常数,请设计算法,在O(n)的时间内找到这个数。给定一个数组number,即所有剩下的数按从小到大排列的二进制各位的值,如A[0][1]表示剩下的第二个数二进制从低到高的第二位。同时给定一个int n,意义如题。请返回缺失的数。测试样例:原创 2017-07-20 20:09:46 · 195 阅读 · 0 评论 -
程序员面试金典:链表--链式A+B、回文链表
1.链表--链式A+B题目描述有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。测试样例:2.回文链表原创 2017-07-17 10:23:23 · 349 阅读 · 0 评论 -
程序员面试金典:奇偶位交换、判断直线相交
1.奇偶位交换题目描述请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)给定一个int x,请返回交换后的数int。测试样例:10返回:52.判断直线相交原创 2017-07-20 20:10:50 · 337 阅读 · 0 评论 -
程序员面试金典:机器人走方格II、魔术索引I
1.机器人走方格II题目描述有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。注意这次的网格中有些障碍点是不能走的。给定一个int[][] map(C++ 中为vector >),表示网格图,若map[i][j]为1则说明该点不是障碍点,否则则为障碍。另外给定int x,int y,表示网格的大小。请返回机器人从(0,0)走到(x - 1,y - 1)的走法数,为了防止溢出,请将结果Mod 1000000007。保证x和y均小于原创 2017-07-23 08:56:51 · 373 阅读 · 0 评论 -
程序员面试金典:魔术索引II、集合的子集
1.魔术索引II题目描述在数组A[0..n-1]中,有所谓的魔术索引,满足条件A[i]=i。给定一个不下降序列,元素值可能相同,编写一个方法,判断在数组A中是否存在魔术索引。请思考一种复杂度优于o(n)的方法。给定一个int数组A和int n代表数组大小,请返回一个bool,代表是否存在魔术索引。测试样例:原创 2017-07-23 10:04:52 · 229 阅读 · 0 评论 -
程序员面试金典:第K个数、机器人走方格
1.第K个数题目描述有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。给定一个数int k,请返回第k个数。保证k小于等于100。测试样例:3返回:7原创 2017-07-20 20:12:23 · 398 阅读 · 0 评论 -
程序员面试金典:无缓存交换、井字棋
1.无缓存交换题目描述请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。测试样例:2.井字棋原创 2017-07-20 20:13:43 · 424 阅读 · 0 评论 -
程序员面试金典:平分的直线、穿点最多的直线
1.平分的直线题目描述在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。给定两个vecotrA和B,分别为两个正方形的四个顶点。请返回一个vector,代表所求的平分直线的斜率和截距,保证斜率存在。测试样例:[(0,0),(0,1),(1,1),(1,0)],[(1,0),(1,1),(2,0),(2原创 2017-07-22 09:49:21 · 468 阅读 · 0 评论 -
程序员面试金典:无判断max、阶乘尾零
题目描述请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。给定两个int a和b,请返回较大的一个数。若两数相同则返回任意一个。测试样例:1,2返回:2原创 2017-07-21 05:40:07 · 432 阅读 · 0 评论 -
程序员面试金典:词频统计、整数对查找
1.词频统计题目描述请设计一个高效的方法,找出任意指定单词在一篇文章中的出现频数。给定一个string数组article和数组大小n及一个待统计单词word,请返回该单词在文章中的出现频数。保证文章的词数小于等于1000。1.词频统计题目描述请设计一个高效的方法,找出任意指定单词在一篇文章中的出现频数。给定一个string数组article和数组大小n及一个待统计单词word,请返回该单词在文章中的出现频数。保证文章的词数小于等于1000。原创 2017-07-21 05:41:04 · 553 阅读 · 0 评论 -
程序员面试金典:另类加法、单词最近距离
1.另类加法题目描述请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。给定两个int A和B。请返回A+B的值测试样例:1,2返回:原创 2017-07-21 07:44:47 · 641 阅读 · 0 评论 -
程序员面试金典:翻转子串、链表中倒数第k个结点
1.翻转子串题目描述假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。2.链表中倒数第k个结点原创 2017-07-17 10:19:52 · 466 阅读 · 0 评论 -
程序员面试金典:链表--访问单个节点的删除、链表分割
1.访问单个节点的删除题目描述实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true原创 2017-07-17 10:21:15 · 306 阅读 · 0 评论 -
程序员面试金典: 检查是否为BST、 寻找下一个结点
1.检查是否为BST题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。原创 2017-07-19 21:15:41 · 291 阅读 · 0 评论 -
程序员面试金典:字符串--确定字符串互异、原串翻转、空格替换
1.确定字符串互异:题目描述请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。测试样例:"aeiou"返回:True"B原创 2017-07-03 10:42:10 · 278 阅读 · 0 评论 -
程序员面试金典:字符串--确定两串乱序同构、基本字符串压缩
1.确定两串乱序同构题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。测试样例:"This is nowcode原创 2017-07-03 10:45:34 · 266 阅读 · 0 评论 -
程序员面试金典:下一个最大元素
1.下一个较大元素2.下一个较大元素(2)题目描述 现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。测试样例:[11,13,10,5,12,21,3],7 返回:[13,21,12,12,21,-1,-1]原创 2017-07-02 14:13:18 · 533 阅读 · 0 评论 -
程序员面试金典:数组--像素翻转、清除行列
1.像素翻转题目描述有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。测试样例:[[1,2,3],[4,5,6],[7,8,9]],3返回:[原创 2017-07-17 10:15:30 · 500 阅读 · 0 评论 -
Java中String类常用方法总结
本文总结一下java中String类常用的一些API方法。1.String.format函数此函数用于创建格式化的字符串以及连接多个字符串对象,例如:String strA = String.format("谢尔顿,%s", "明天杭州搞起吗?");String strB = String.format("谢尔顿,%s,你上次借的%d块钱什么时候还," ...原创 2017-07-24 07:59:08 · 404 阅读 · 0 评论 -
程序员面试金典:高度最小的BST、输出单层结点
1.高度最小的BST题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。import java.util.*;public class MinimalBST { public int buildMinimalBST(int[] v原创 2017-07-21 09:45:46 · 366 阅读 · 0 评论 -
程序员面试金典:双栈排序、猫狗收容所
题目描述请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。原创 2017-07-18 22:17:20 · 403 阅读 · 0 评论 -
程序员面试金典:二叉树平衡检查、有向路径检查
1.二叉树平衡检查题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。题目描述对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b原创 2017-07-19 21:14:57 · 326 阅读 · 0 评论 -
程序员面试金典:子串判断、 最大连续数列和
1.子串判断题目描述现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串。给定一个string数组p和它的大小n,同时给定string s,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串。保证p中的串长度小于等于8,且p中的串的个数小于等于500,同时保证s的长度小于等于1000。测试样例:原创 2017-07-21 08:54:18 · 524 阅读 · 0 评论