Interview
文章平均质量分 75
Alex123980
分享经验,传递快乐
展开
-
BAT实习内推笔试卷(第一场)
NO.1 给定一个长度不小于2的数组arr。 写一个函数调整arr,使arr中要么所有的偶数位上都是偶数,要么所有的奇数位上都是奇数上。 要求:如果数组长度为N,时间复杂度请达到O(N),额外空间复杂度请达到O(1),下标0,2,4,6...算作偶数位,下标1,3,5,7...算作奇数位,例如[1,2,3,4]调整为[2,1,4,3]即可解答:题目要求是或者只要有一个条件满足即可结束,所以原创 2016-07-09 21:24:46 · 812 阅读 · 0 评论 -
CrackingtheCodeInterview之递归和动态规划
NO.1 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一个方法,计算小孩有多少种上楼梯的方式。解法:试想小孩在上到第n阶台阶前可能选择了一次上几阶台阶,1/2/3都有可能,所以子问题是第n-1阶台阶、第n-2阶台阶和第n-3阶台阶这些方法的和。因此,按照这种递归去解决问题即可,时间复杂度为O(3^n)。采用动态规划的方法可以避免重复的计算,保存每一层台阶实现的方法,原创 2016-07-07 21:43:33 · 679 阅读 · 0 评论 -
C结构体之位域(位段)
原文网址:点击打开链接有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把转载 2016-07-19 20:44:32 · 7904 阅读 · 1 评论 -
CrackingtheCodeInterview之排序与查找
NO.1 给定两个排序后的数组A和B,其中A的末端有足够的缓冲空容纳B。编写一个方法,将B合并入A并排序。解法:联系插入排序,遍历B中元素,逐个插入到A中即可。NO.2 编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置。解法:变位词如word与rowd就是一组,首先将字符串排序,作为键值插入到哈希表中,最后再将哈希表复制到数组中即可。NO.3 给定一个排序后的数组,包原创 2016-07-09 11:07:46 · 367 阅读 · 0 评论 -
CrackingtheCodeInterview之C与C++
NO.1 用C++写个方法,打印输入文件的最后K行。解法:第一种方法,读取文件获取文件总行数,再次读取文件从N-K+1行开始读取直到结束。第二种方法,使用循环式数组,将读取的每一行放入字符串数组中,当i大于k时,令i mod K作为字符串数组的序号,覆盖原字符串。NO.2 比较并对比散列表和STL map。散列表是如何实现的?如果输入的数据量不大,可以选用哪些数据结构替代散列表?解原创 2016-07-09 17:06:42 · 423 阅读 · 0 评论 -
C++ STL priority_queue
原文网址:点击打开链接priority_queue 对于基本类型的使用方法相对简单。他的模板声明带有三个参数,priority_queueType 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.STL里面容器默认用的是 vector.转载 2016-08-27 10:28:07 · 499 阅读 · 0 评论 -
浅谈C++多态性
原文链接:点击打开链接C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实转载 2016-08-28 09:56:44 · 439 阅读 · 0 评论 -
c++(重载、覆盖、隐藏)
原文链接:点击打开链接成员函数的重载、覆盖与隐藏成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。8.2.1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:转载 2016-08-28 09:58:07 · 465 阅读 · 0 评论 -
虚函数的工作原理
原文网址:点击打开链接一、虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到 vtbl转载 2016-08-28 10:52:47 · 565 阅读 · 0 评论 -
01背包、完全背包、多重背包问题分析
背包问题可以用递归方法和动态规划方法,递归代码简洁,方便理解,不过由于重复计算,效率较低,DP方法将前面的计算结果保存到二维数组中,效率较高,值得推荐。1. 01背包(ZeroOnePack): 有n件物品和一个容量为m的背包。(每种物品均只有一件)第i件物品的费用是weight[i],价值是value[i]。求解将哪些物品装入背包可使价值总和最大。解题思路:对于每个物品只考虑两种情况(放原创 2016-08-29 10:02:11 · 905 阅读 · 0 评论 -
动态规划解决最长公共子序列和最长公共子串
原文链接:点击打开链接1. 问题描述子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串cnblogsbelong比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列。最长公共子序列(Longest Common Subsequence, LCS),顾名思义,是指在所有的子序转载 2016-08-25 17:02:34 · 607 阅读 · 0 评论 -
C语言求最小公倍数和最大公约数三种算法
原文链接:点击打开链接最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b:① a%b得余数c转载 2016-08-25 19:31:20 · 565 阅读 · 0 评论 -
多线程死锁的产生以及如何避免死锁
原文网址:点击打开链接一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。转载 2016-08-25 20:28:39 · 8625 阅读 · 0 评论 -
SQL表连接查询
原文链接:点击打开链接SQL表连接查询(inner join、full join、left join、right join)SQL表连接查询(inner join、full join、left join、right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表。 表的数据有:转载 2016-08-25 20:55:19 · 1147 阅读 · 0 评论 -
数独问题的解决办法
数独(すうどく,Sūdoku),是源自18世纪瑞士发明,流传到美国,再由日本发扬光大的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。上机笔试题目描述如下:数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个原创 2016-06-13 20:18:09 · 5299 阅读 · 0 评论 -
上机笔试题3及程序源码
扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):) 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER原创 2016-06-13 09:31:19 · 711 阅读 · 0 评论 -
上机笔试题2及程序源码
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)3.输入的文件可能带路径,记录原创 2016-06-13 09:19:54 · 597 阅读 · 0 评论 -
CrackingtheCodeInterview之中等难题
NO.1 编写一个函数,不用临时变量,直接交换两个数。解法:已知a,b,交换a和b,可以:a=a-b; b=b+a; a=b-a;也可以:a^=b; b^=a; a^=b;NO.2 设计一个算法,判断玩家是否赢了井字游戏。解法1:井字游戏包含9个格子,每个格子的结果有3种情况,空、红和蓝,可以将每个格子 的情况表示为012,然后计算9个格子构成的3进制数,需要提前需处理计算每种情况原创 2016-07-10 17:13:19 · 601 阅读 · 0 评论 -
判断B是否为A的子结构
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路:从A的根节点开始与B树进行匹配,若节点值相同就继续匹配左右孩子节点,若出现不同就从A的左右孩子开始匹配B的根节点,直到在A中找到一个与B节点完全相同的子结构。可以采用两个模块完成,HasSubtree函数用于判断根节点是否一致,递归调用,IsSubtree函数用于判断其余节点是否一致,原创 2016-07-14 10:15:28 · 1001 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:方法一:非递归版中序遍历使用二叉树的非递归的中序遍历,while双层循环,不断将节点压入栈中,当某个节点不存在左儿子时,就弹出该节点访问其右孩子,每次保存当前遍历节点到pre指针,正在访问节点指针为p,令pre和p建立双向链表连接关系即可。方原创 2016-07-15 11:02:08 · 351 阅读 · 0 评论 -
螺旋队列实现
原文链接:点击打开链接螺旋队列的样子如下图:两大规律:1、螺旋规律2、奇数(圈数,或X轴正坐标)平方规律(紫线) 问题描述: 设1的坐标是(0,0),x方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),2的坐标为(1,0)。编程实现输入任意一点坐标(x,y),输出所对应的数字! 问题解决:转载 2016-07-17 09:58:55 · 486 阅读 · 0 评论 -
c语言中内存的动态分配与释放(多维动态数组构建)
原文网址:点击打开链接一. 静态数组与动态数组 静态数组比较常见,数组长度预先定义好,在整个程序中,一旦给定大小后就无法再改变长度,静态数组自己自动负责释放占用的内存。 动态数组长度可以随程序的需要而重新指定大小。动态数组由内存分配函数(malloc)从堆(heap)上分配存储空间,只有当程序执行了分配函数后,才为其分配内存,同时由程序员自己负责释放分配的内存(free)。转载 2016-07-17 19:52:02 · 5675 阅读 · 0 评论 -
CrackingtheCodeInterview之数学与概率
NO.1 有个篮球框,下面两种玩法可任选一种。玩法1:一次出手机会,投篮命中得分。玩法2:三次出手机会,必须投中两次。如果p是某次投篮命中的概率,则p的值为多少时,才会选择玩法1或玩法2?解法:玩法1成功的几率为p,玩法2成功的几率为p*p+p*(1-p)*p+(1-p)*p*p=3p*p-2*p*p*p,比较两者当p0.5时方法2较好。NO.2 三角形的三个顶点上各有一只蚂蚁。如果蚂蚁开原创 2016-07-05 16:50:49 · 566 阅读 · 0 评论 -
CrackingtheCodeInterview之智力题
例题1. 给定两条绳子,每条绳子燃烧殆尽正好要用一个小时。怎样用这两条绳子准确计量15分钟?注意这些绳子密度不均匀,因此烧掉半截绳子不一定正好用半个小时。解法:一条绳子从两端同时点燃,则燃烧殆尽时要用半个小时,若A绳子两端同时点燃,而B绳子点燃一端,在A绳子燃烧殆尽后,再点燃B的另一端,就能计量出15分钟了。例题2:“九球称重”是一个经典面试题。给定9个球,其中8个球的重量相同,只有一个比原创 2016-07-05 14:58:58 · 838 阅读 · 0 评论 -
CrackingtheCodeInterview之位操作
NO1. 给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第j位开始,到第i位结束。假定从j位到i位足以容纳M,也即若M=10011,那么j和i之间至少可容纳5个位。例如,不可能出现j=3和i=2的情况,因为第3位和第2位之间放不下M。示例:输入:N=1000 0000 0000 0000, M=1 0011,i=2,j=6 输出:N=100原创 2016-07-04 19:33:16 · 391 阅读 · 0 评论 -
CrackingtheCodeInterview之树与图
NO.1 实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过1。方法1:递归调用getHeight(left)和getHeight(right)函数,比较差值是否大于1,访问每一个节点判断其是否符合平衡条件,时间复杂度为O(N*logN)。int getHeight(node root){ if(!root) return 0;原创 2016-07-03 20:01:06 · 330 阅读 · 0 评论 -
CrackingtheCodeInterview之栈与队列
NO.1 请描述如何只用一个数组来实现三个栈?固定长度栈方法:等分数组实现三个栈可变长度栈方法:1、2号栈挨着,3号栈从数组尾部开始,每次往1中压入和弹出操作时,需动态调整2号栈,这是缺陷。NO.2 请设计一个栈,除pop与push方法,还支持min方法,可返回栈元素的最小值。push、pop和min方法的时间复杂度必须为O(1)。1:修改node节点结构体,增加一个min标记变量原创 2016-07-03 10:46:15 · 304 阅读 · 0 评论 -
CrackingtheCodeInterview之链表
NO1. 编写代码,移除未排序链表中的重复节点。使用set存储链表元素,判断set中是否已经存在,若存在就删除。这种方法的时间复杂度为O(N),空间复杂度为O(N)。进阶如果不得使用临时缓冲区,该怎么解决?基本解法:针对每一个链表节点,遍历链表的所有其他节点,若存在重复的就删除。时间复杂度为O(N^2),空间复杂度为O(1)。NO2. 实现一个算法,找出单向链表中倒数第k个原创 2016-07-02 16:35:04 · 287 阅读 · 0 评论 -
CrackingtheCodeInterview之数组与字符串
//NO.1//实现一个算法,确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理?初步想法:将字符串排序,然后比较相邻元素是否相同。较好思路:1、字符串分为ASCII和Unicode两种,ASCII码共256种,Unicode码共65536种,可以定义bool型数组,并初始化为false,遍历字符串,每次将字符对应的bool型变量改为true,每次更改原创 2016-07-01 21:21:36 · 294 阅读 · 0 评论 -
上机笔试题1及程序源码
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述:输入包括多组测试数据。每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。学生ID编号从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩接下原创 2016-06-12 16:03:44 · 598 阅读 · 0 评论 -
进程和线程的关系与区别
原文网址:点击打开链接1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程原创 2016-08-27 09:44:06 · 493 阅读 · 0 评论