
程序员面试经典编程题
文章平均质量分 58
也非野人
这个作者很懒,什么都没留下…
展开
-
输出单层结点之程序员面试经典
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。思路:简单来说,步骤就是1.可以先用按层遍历把每一层都用A原创 2016-05-11 18:25:29 · 318 阅读 · 0 评论 -
双栈排序之程序员面试经典
题目描述请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。package com.mianshi;import j原创 2016-05-07 21:13:10 · 642 阅读 · 0 评论 -
高度最小的BST之程序员面试经典
题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:原创 2016-05-08 20:34:44 · 501 阅读 · 0 评论 -
二叉树平衡检查之程序员面试经典
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡这道题目可以采用后序遍历的的方式进行递归遍历;lh是符合条件的当前节点左子树的深度,rh是符合条件的当前节点有字数的深度每次判断从叶子节点开始,原创 2016-05-08 20:40:45 · 351 阅读 · 0 评论 -
找出缺失的整数
题目描述数组A包含了0到n的所有整数,但其中缺失了一个。对于这个问题,我们设定限制,使得一次操作无法取得数组number里某个整数的完整内容。唯一的可用操作是询问数组中第i个元素的二进制的第j位(最低位为第0位),该操作的时间复杂度为常数,请设计算法,在O(n)的时间内找到这个数。给定一个数组number,即所有剩下的数按从小到大排列的二进制各位的值,如A[0][1]表示剩下的原创 2016-06-24 15:45:34 · 907 阅读 · 0 评论 -
判断直线相交
题目描述给定直角坐标系上的两条直线,确定这两条直线会不会相交。线段以斜率和截距的形式给出,即double s1,double s2,doubley1,double y2,分别代表直线1和2的斜率(即s1,s2)和截距(即y1,y2),请返回一个bool,代表给定的两条直线是否相交。这里两直线重合也认为相交。测试样例:3.14,1,3.14,2返回:false原创 2016-06-29 20:42:27 · 1028 阅读 · 0 评论 -
碰撞的蚂蚁
题目描述在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率。(这里的相撞是指存在任意两只蚂蚁会相撞)给定一个int n(3测试样例:3返回:0.75思路:每个蚂蚁爬行的方向都有两个,即围绕多边形顺时针爬和逆时针爬,因此n个蚂蚁爬行的方法有2^n种。只有当所有的蚂蚁按照同一个方向爬行才能保证所有的蚂蚁都不相原创 2016-06-29 20:43:33 · 907 阅读 · 0 评论 -
二进制插入
题目描述有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始。给定两个数int n和int m,同时给定int j和int i,意义如题所述,请返回操作后的数,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。测试样例:1024,19,2,6返回:1100思路原创 2016-06-22 14:19:17 · 468 阅读 · 0 评论 -
二进制小数
题目描述有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。测试样例:0.625返回:0.101思路例如:num = 0.625因为小原创 2016-06-22 14:45:33 · 451 阅读 · 0 评论 -
最接近的数
题目描述有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。测试样例:2返回:[1,4]思路:以给出的数为基础,先将给出的数的二进制中有几个1判断出来,然后再分别判别当前数左边右边的数是否二进制中的1也和当前数一样代码如下:原创 2016-06-22 15:34:47 · 2590 阅读 · 0 评论 -
整数转化
题目描述编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。给定两个整数int A,int B。请返回需要改变的数位个数。测试样例:10,5返回:4思路:A 需要变换 多少位 才能得到B,位变换无非就是0-1,1-0的过程所以,A和B之间 有多少的不同的0-1,1-0的变换就有需要多少位的变换,由于异或操作是原创 2016-06-23 15:32:02 · 601 阅读 · 0 评论 -
奇偶位交换
题目描述请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)给定一个int x,请返回交换后的数int。测试样例:10返回:5解题思路:(1)先操作奇数位,把101010(即0xAA)作为掩码,提取奇数位,并右移1位到偶数位置(2)操作偶数位,把010101(即0x5555)作为掩码,提取偶数位,并左移一位到奇数位置原创 2016-06-23 16:04:16 · 732 阅读 · 0 评论 -
基本字符串压缩之程序员面试经典
利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待压缩的串(长度小于等于3000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例"aabcccccaaa"原创 2016-04-21 22:24:00 · 440 阅读 · 0 评论 -
程序员面试经典之链表分割
题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。代码如下:public class ListNode { int val; ListNode next = null;原创 2016-04-28 21:44:38 · 390 阅读 · 0 评论 -
寻找下一个结点
题目描述请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。思路:用中序遍历的下一个就是题目所说的下一个结点代码如下:import java.util.*;原创 2016-05-24 22:51:34 · 339 阅读 · 0 评论 -
最近公共祖先
题目描述有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:2,3返回:1思路:满二叉树的子节点与父节点之间的关系为root原创 2016-05-24 23:22:56 · 951 阅读 · 0 评论 -
检查是否为BST
题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树代码如下:package com.mianshi;import java.util.Stack;public class jingdian_21 { static class TreeNode原创 2016-05-16 08:51:35 · 388 阅读 · 0 评论 -
猫狗收容所之程序员面试经典
题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。 给定一个操作序列int[][2] ope(C++中为vector>)代表所有事件。若第一个元素为1,则代表有动物进入收容所,第二个元素为动物的编号,正数代表原创 2016-05-07 20:10:29 · 806 阅读 · 0 评论 -
用两个栈实现队列之程序员面试经典
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。比如有栈A和栈B,在模拟队列的时候先将所有数据依次放入栈A中,在要弹出的时候将A中的数据依次从上到下放进栈B,结束之后取出B中最上面的那个数据,然后从上到下将数据放进栈A中,这样就用两个栈来实现了一个队列的“先进先出”的特点,而栈的特点是“后进先出”代码如下:St原创 2016-05-07 21:47:28 · 393 阅读 · 0 评论 -
集合栈之程序员面试经典
题目描述请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。给定一个操作序列int[][2] ope(C++为vector>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个i原创 2016-05-05 22:31:34 · 378 阅读 · 0 评论 -
链式A+B之程序员面试经典
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。测试样例:{1,2,3},{3,2,1}返回:{4,4,4}这是有进位的,所以需要%10得到个位的数值,然后进几位用/1原创 2016-05-04 22:32:03 · 419 阅读 · 0 评论 -
清除行列之程序员面试经典
请编写一个算法,若MxN矩阵中某个元素为0,则将其所在的行与列清零。给定一个MxN的int[][]矩阵(C++中为vector)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原创 2016-04-21 22:28:22 · 346 阅读 · 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原创 2016-04-21 22:26:15 · 510 阅读 · 0 评论 -
确定两串乱序同构之程序员面试经典
给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。测试样例:"This is nowcoder","is This nowcoder"返原创 2016-04-20 23:40:27 · 324 阅读 · 0 评论 -
回文链表之程序员面试经典
题目描述请编写一个函数,检查链表是否为回文。给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。测试样例:{1,2,3,2,1}返回:true{1,2,3,2,3}返回:false代码实现:public boolean isPalindrome(ListNode pHead) {原创 2016-05-04 23:35:56 · 291 阅读 · 0 评论 -
Java集合类详解
Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Element转载 2016-08-01 21:09:05 · 172881 阅读 · 21 评论