阿里巴巴2015算法工程师实习生笔试卷
- 格式:pdf
- 大小:249.41 KB
- 文档页数:6
2015年阿里巴巴校园招聘笔试题目笔试时间为2014年8月29日,均为网上答题。
第一部分为单选题,共20题,要在40分钟内完成。
每个人的选择题都不一样,应该是后台有题库,每个人的试卷都是随机生成的。
第二部分为附加题,一般为1道问答题,2道编程题。
通过算法生成的随机数是“伪随机”的,也就是说,在设定好第一个数之后,后面的数字的序列是确定的,并且经过一个非常大的循环会回到第一个数的状态,然后周而复始。
显然,摇号、抽奖的程序是不能通过伪随机数来实现的。
现实中常常基于某种热噪声来实现真正的随机数。
假定某热噪声是标准正态分布,那么能否将它转换成区间上的均匀分布______?忽略测量和计算误差,可以转换为区间上的均匀分布。
无法转换为区间上的均匀分布。
信息不足,无法判断。
借助伪随机数生成算法可以转换为区间上的均匀分布。
仅仅靠伪随机数生成算法,就可以生成区间上的均匀分布以上说法都不对。
在一个童话世界里,任意两个人之间要么是朋友关系,要么是敌人关系,不存在其他关系及没有关系的情况。
并且,如果A和B是朋友关系,B和c是朋友关系,那么A和c必然是朋友关系。
那么关于这个童话世界中的人群的说法错误的是:______?可能只有1个人群,这个人群内部是朋友关系。
可能有2个人群,人群内部是朋友关系,人群之间是敌人关系。
可能有3个及以上个人群,人群内部是朋友关系,人群之间是敌人关系。
如果存在多个人群,并且人群内部是朋友关系,人群之间是敌人关系,那么这些人群必然是差不多大小的。
选项B中的情况可以是其中一个人群只有一个人,另外一个人群可以由很多人。
这样一个世界里朋友关系是比较不容易发生变化的。
12321能被写成______种两个质数相加的形式。
12345在小端序的机器中,如果unionX{intx;chary[4];};如果:Xa;=0x11223344;//16进制则:______[0]=11[1]=11[2]=11[3]=11[0]=22XX『』[3]=22使用一辆卡车运输n块单块1TB装满数据的硬盘,以时速80km/h行驶1000km 将数据运送到目的地;卡车至少运送______块硬盘才能使传输速率超1000Gbps。
阿⾥暑期实习笔试题阿⾥暑期实习笔试题阿⾥暑期实习的笔试,3⽉6⽇的第⼀场据说⽐较难,两道 leetcode hard题。
3.9 更新找到问题了,问题出在auto&& [stop, step] = q.front(); q.pop();这两句上,我们使⽤的是⼀个引⽤,但是后来这个元素被 pop 释放掉了,所以会报内存错误。
使⽤auto& [stop, step]也会出错,因为也是引⽤类型;只有使⽤auto [stop, step]做拷贝赋值才不会引起内存错误。
第⼀题感觉思路还是很直观的,注意数据的溢出问题就⾏了,1E9 * 2不会溢出,1E9 * 3就会溢出了。
我这⾥没有把数据类型提升到 int64_t,不然的话可以只做⼀次取余,毕竟 int64_t 之下1E9 * 5也溢出不了。
题⽬描述You have a grid of size n x 3 and you want to paint each cell of the grid with exactly one of the three colors: Red, Yellow, or Green while making sure that no two adjacent cells have the same color (i.e., no two cells that share vertical or horizontal sides have the same color). Given n the number of rows of the grid, return the number of ways you can paint this grid. As the answer may grow large, the answer must be computed modulo 109 + 7.Example 1:Input: n = 1Output: 12Explanation: There are 12 possible way to paint the grid as shown.Example 2:Input: n = 2Output: 54Example 3:Input: n = 3Output: 246Example 4:Input: n = 7Output: 106494Example 5:Input: n = 5000Output: 30228214Constraints:n == grid.lengthgrid[i].length == 31 <= n <= 5000解题思路这是⼀道显⽽易见的 DP 题⽬,下⼀层的涂⾊⽅案仅依赖于上⼀层,有点类似于那道矩形覆盖题:⽤2x1的⼩矩形⽆重叠地覆盖2xn的⼤矩形(斐波那契数列嘛)。
注意:
图中给出的不是答案!图中给出的不是答案!图中给出的不是答案!
另外,阿里的题库很大……
附加题:
第一题,编程:
已知一个完全还原的魔方,输入操作代码(例如U代表将魔方顶层顺时针转90度等,详见魔方攻略),要求输出经过多次操作后魔方各个面的颜色。
例如:输入LR,输出执行一次L操作一次R操作后各面的颜色。
要求使用C或JAVA编程。
第二题,简答:
二分类问题,若数据本身的分布不平衡(A类特别多而B类特别少),
a.此时用精确性(预测正确/全体样本)衡量模型的分类情况合适吗?一般改采用哪些指标?简述各指标的含义
b.如何解决不平衡数据的分类问题?对于SVM,如何调整参数C防止出现过拟合?对于其他模型一般如何防止模型产生过拟合?。
有一个装过食盐的瓶子,容积是w,在食盐用完之后,还有一些食盐粉末(体积可以忽略)残留在瓶子壁上。
现在要把该瓶子改装糖,给你u体积的纯净水,用来清洗该瓶子。
在每次清洗之后,瓶子里会残留至少v体积的水(食盐溶液,可以忽略盐的体积)。
假设w>u>v,请问下述哪种方式使用这些纯净水,能把瓶子洗得最干净______?∙把所有的纯净水全部倒入瓶子,然后把水倒掉。
∙将纯净水平均分为两份,用每一份清水洗一遍瓶子。
∙每次注入体积为v的纯净水清洗瓶子,直到纯净水用尽。
∙每次注入体积为2v的纯净水清洗瓶子,直到纯净水用尽。
∙将用过的水重新注入瓶子,多次清洗。
∙以上方法清洗效果相同。
int main(){ fork()||fork();} 共创建几个进程:______。
∙ 1∙ 2∙ 3∙ 4∙ 5∙ 6以下属性中,______不是m阶B树特性。
∙根节点至少2子女节点∙非根节点包含的子女数j满足:┌m/2┐ - 1 <= j <= m - 1∙除根结点以外的所有内部结点度数为存储关键字总数加2 D.常用于计算机磁盘文件组织∙叶节点均位于同一层∙B+也常用于计算机磁盘文件组织使用一辆卡车运输n块单块1TB装满数据的硬盘,以时速80km/h行驶1000km 将数据运送到目的地;卡车至少运送______块硬盘才能使传输速率超1000Gbps。
∙2000∙3000∙4000∙5000∙6000∙700012321能被写成______种两个质数相加的形式。
∙0∙ 1∙ 2∙ 3∙ 4∙ 5在以下操作中,数组比线性表速度更快的是______。
∙原地逆序∙头部插入∙返回中间节点∙返回中间节点∙返回头部节点∙选择随机节点程序出错在什么阶段______?int main(void){cout<< “welcome to taobao"<<endl;}∙预处理阶段出错∙编译阶段出错∙汇编阶段出错∙链接阶段出错∙运行阶段出错∙程序运行正常以下排序方式,平均时间复杂度最差的排序是______。
答案:D内联函数:Tip:只有当函数只有10 行甚至更少时才将其定义为内联函数.定义: 当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.优点: 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.缺点: 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。
结论: 一个较为合理的经验准则是, 不要内联超过10 行的函数. 谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含的成员和基类析构函数被调用!另一个实用的经验准则: 内联那些包含循环或switch 语句的函数常常是得不偿失(除非在大多数情况下, 这些循环或switch 语句从不被执行).注意:有些函数即使声明为内联的也不一定会被编译器内联, 这点很重要; 比如虚函数和递归函数就不会被正常内联. 通常, 递归函数不应该声明成内联函数.(递归调用堆栈的展开并不像循环那么简单, 比如递归层数在编译时可能是未知的, 大多数编译器都不支持内联递归函数). 虚函数内联的主要原因则是想把它的函数体放在类定义内, 为了图个方便, 抑或是当作文档描述其行为, 比如精短的存取函数.-inl.h文件:Tip:复杂的内联函数的定义, 应放在后缀名为-inl.h 的头文件中.内联函数的定义必须放在头文件中, 编译器才能在调用点内联展开定义. 然而, 实现代码理论上应该放在 .cc 文件中, 我们不希望 .h 文件中有太多实现代码, 除非在可读性和性能上有明显优势.如果内联函数的定义比较短小, 逻辑比较简单, 实现代码放在 .h 文件里没有任何问题. 比如, 存取函数的实现理所当然都应该放在类定义内. 出于编写者和调用者的方便, 较复杂的内联函数也可以放到 .h 文件中, 如果你觉得这样会使头文件显得笨重, 也可以把它萃取到单独的-inl.h 中. 这样把实现和类定义分离开来, 当需要时包含对应的-inl.h 即可。
阿里巴巴笔试题及答案篇一:阿里巴巴oracle-dba 笔试题及答案】txt>1: 列举几种表连接方式hash join/merge join/nest loop(cluster join)/index join2: 不借助第三方工具,怎样查看sql 的执行计划set autot onexplain plan set statement_id = item_id for sql;select * from table(dbms_xplan.display);在optimizer_mode=choose 时, 如果表有统计信息(分区表外) ,优化器将选择cbo, 否则选rbo 。
rbo 遵循简单的分级方法学, 使用15 种级别要点,当接收到查询,优化器将评估使用到的要点数目,然后选择最佳级别(最少的数量)的执行路径来运行查询。
cbo 尝试找到最低成本的访问数据的方法, 为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。
4: 如何定位重要(消耗资源多)的sql select sql_textfrom v$sqlwhere disk_reads 1000 or (executions 0 and buffer_gets/executions 30000); 5: 如何跟踪某个session 的sql execdbms_system.set_sql_trace_in_session(sid,serial#,sql_trace); selectsid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);exec dbms_system.set_ev(sid,serial#,event_10046,level_12,);6:sql 调整最关注的是什么查看该sql 的response time(db block gets/consistent gets/physicalreads/sorts (disk))7: 说说你对索引的认识(索引的结构、对dml 影响、为什么提高查询性能) b-tree index/bitmap index/function index/patitional index(local/global) 索引通常能提高select/update/delete 的性能, 会降低insert 的速度, 8: 使用索引查询一定能提高查询的性能吗?为什么索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能, 只能说是用错了索引,或者讲是场合不同9: 绑定变量是什么?绑定变量有什么优缺点?绑定变量是相对文本变量来讲的,所谓文本变量是指在sql 直接书写查询条件,这样的sql 在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value 在运行时传递,然后绑定执行。
1.在HTTP GET/POST中一般都需要对参数进行base64编码2.在OSX中的.plist文件中的<data>数据也是Base64编码的PreOrder Travesal•如果是完全树的话,就是2^count - 1= 511 => count = 9 ,完全树是9层,然后加上一个小尾巴,就是10层。
•接着,我们考虑最差的情况,就是树退化为链表,这时count = 513;16 - a^2 + 6a > 0a^2 - 6a -16 <0(a + 2)(a - 8) >0so , a>8当 a < 0 , no way.so , a>811.一个电动模型,每一组电池能让其行驶8分钟,一个充电器能同时给两组电池充电,一组充满需要15分钟,至少准备_组电池,可以让模型行驶完立即换电池行驶不用等待。
解答:两组肯定不够的,假设有3组充满的电池,我们用笔划一划int use = 8int charge[2] = 0,0use = 0charge[2] = 0,0;use = 8charge = 15,0use = 0charge = 7,0;use = 8charge = 7,15;use = 0;charge = 15, 8;所以3个是可以的。
12.对于下面的代码,正确的是?char* s1 = "Hello world";char s2[] = "Hello world";s1[2] = 'E'; //1s2[2] = 'E'; //2*(s1 + 2) = 'E'; //3*(s2 + 2) = 'E'; //4解答:s1是char*类型,它指向常量字符串,而常量早已经在编译的时候就写入程序中了,是不可改变的; s2是char[]类型,它指向数组的第一位;我们分开解答,先把情况1转换为单独的代码void dosome(void){char* s1 = "hello world";s1[2] = 'E';}系统报错Bus error: 10我们拿出Hopper Disassembler这个神器,把二进制文件反编译后是function dosome() {var_m8 = "hello world";rax = var_m8;//int8_t 就是 char*(int8_t *)(rax + 0x2) = 0x45;return rax;}通过反编译,我们知道了s1[2] = 'E' 实际上就是先强制转换,然后所指向的值赋值为0x45 的意思。
2015届阿里巴巴校招测试开发工程师在线笔试题一. 单项选择题1. 下列描述中,唯一正确的是()。
A本题没有正确选项B本题有多个正确选项C D和E都不正确D B和C有一个正确E C不正确F E和F有一个正确2. 动态内存分配(C语言中的malloc,C++中的new)得到的存储区属于内存中的()。
A静态区B堆(heap)C栈(stack)D堆栈E内核内存F不确定3. 下列方法中,()不可以用来程序调优 ?A改善数据访问方式以提升缓存命中率B使用多线程的方式提高I/O密集型操作的效率C利用数据库连接池替代直接的数据库访问D使用迭代替代递归E合并多个远程调用批量发送F共享冗余数据提高访问效率4. 分布式系统中,()不是可扩展性所需要的。
A无状态应用集群B分布式缓存C负载均衡D硬件共享存储E分而治之的策略F以上所有都是5. 二分查找树里查询一个关键字的最坏时间复杂度为()。
A O(n)CO(n^2)DO(n^3)EO(logn)F 不确定A15B30C64D132E256F 360A500元B510元C520元D530元E540元F 以上都不对A可共享正文B可共享数据C可重入D可保护代码为只读E方便编程F 更好支持内存回收策略A循环体一次也不执行 循环体执行一次 是无限循环 有限次循环 循环结束判断条件不合法 运行出错B 循环体执行一次 是无限循环6. 一个合法的表达式由()包围,()可以嵌套和连接,如(())()也是合法表达式;现在有6对(),它们可以组成的合法表达式的个数为多少?7. 中关村电子城某卖手机的店铺给客人报价,如果按照底价500元(成本价)报出,那么客人就一定会选择在该店铺购买;价格每增加1元,客人流失的可能性增加1%。
那么该店铺给客人报出的最优价格是()?8. 关于UNIX 系统代码段和数据段分开的目的,错误的说法有()。
9. 设m 和都是int 类型,那么以下for 循环语句的执行情况是()。
阿⾥笔试的⼀道算法题题⽬:获取⼀个正整数数组的最优跳动⽅式,要求如下:1)从数组中间的任意位置开始向右跳,每次跳动的步伐数不能超过该位置对应元素的值2)在跳动次数最少的情况下计算每次跳动的步伐以下是实现,采⽤java实现~package test;/***为静态⼯具类,具体功能见⽅法* @author ZOUHENG*/public class MinStepToArrayEnd {/*** 根据当前位置的跳动范围返回⼀个最优的位置,该位置使得连续两次跳动可获得最远距离如果当前位置可以直接跳出数组范围,则最有位置为当前位置 * 这⾥默认传⼊的参数已经经过验证,满⾜要求** @param target* ⽬标数组* @param currentLocation* 当前位置,对应元素的从左到右的排列位置,第⼀个元素为1,最后⼀个元素为数组长度* @return最优秀位置*/private static int getBestLocation(int[] target, int currentLocation) {// 初始化⼆连跳的最远位置,可以超出数组范围int maxLocation = currentLocation + target[currentLocation - 1];// 初始化当前位置int bestLocation = currentLocation;// 遍历当前位置覆盖的元素,获得⼆连跳的最远位置和对应的最优位置for (int i = 0; i <= target[currentLocation - 1]; i++) {int temp = target[(i + currentLocation) - 1] + (i + currentLocation);if (temp >= target.length) {return i + currentLocation;}if (temp > maxLocation) {maxLocation = temp;bestLocation = i + currentLocation;}}return bestLocation;}/*** 根据最佳位置与当前位置计算调动的步伐数量** @param target* @param currentLocation* @return*/private static int getJumpSteps(int[] target, int currentLocation) {int bestLocation = getBestLocation(target, currentLocation);// 如果最佳位置与当前位置相等,则说明可以直接从当前位置跳到末端,因此直接返回剩下的步伐if (bestLocation == currentLocation) {return target.length - currentLocation;}// 如果不等,则返回最佳位置与当前位置的步伐差return bestLocation - currentLocation;}/*** 获取⼀个正整数数组的最优跳动⽅式,要求如下:* 从数组中间的任意位置开始向右跳,每次跳动的步伐数不能超过该位置对应元素的值* 在跳动次数最少的情况下计算每次跳动的步伐** @param target* @param currentLocation* @return* @throws Exception**/public static String getStepsResult(int[] target, int currentLocation) throws Exception {if (null == target || target.length == 0)throw new CheckParamException("数组参数为空或未初始化,请检查······");for (int i : target)if (i < 1)throw new CheckParamException("数组成员包含⼩于⾮正整数");if (currentLocation < 1 || currentLocation > target.length)throw new CheckParamException("开始位置参数不正确,必须⼤于等于1并且⼩于等于" + target.length); String result = "";int jumpSteps = getJumpSteps(target, currentLocation);while (jumpSteps + currentLocation != target.length) {result += jumpSteps + ",";currentLocation = getBestLocation(target, currentLocation);jumpSteps = getJumpSteps(target, currentLocation);}return result + jumpSteps;}/*** 测试*/public static void main(String[] args) throws Exception {int a[] = { 4, 1, 5, 1, 3, 2, 1, 3, 1, 2, 3, 1, 1 };System.out.println(getStepsResult(a, 1));}/*** ⾃定义参数检查异常** @author ZOUHENG*/private static class CheckParamException extends Exception {private static final long serialVersionUID = -5470930382435803070L;public CheckParamException(String message) {super(message);}}}。
阿里巴巴笔试题及答案【篇一:阿里巴巴oracle-dba笔试题及答案】txt>1:列举几种表连接方式hash join/merge join/nest loop(cluster join)/index join2:不借助第三方工具,怎样查看sql的执行计划set autot onexplain plan set statement_id = item_id for sql;select * from table(dbms_xplan.display);在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择cbo,否则选rbo。
rbo遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目,然后选择最佳级别(最少的数量)的执行路径来运行查询。
cbo尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。
4:如何定位重要(消耗资源多)的sqlselect sql_textfrom v$sqlwhere disk_reads 1000 or (executions 0 andbuffer_gets/executions 30000); 5:如何跟踪某个session的sql execdbms_system.set_sql_trace_in_session(sid,serial#,sql_trace); select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);exec dbms_system.set_ev(sid,serial#,event_10046,level_12,); 6:sql调整最关注的是什么查看该sql的response time(db block gets/consistentgets/physical reads/sorts (disk))7:说说你对索引的认识(索引的结构、对dml影响、为什么提高查询性能) b-tree index/bitmap index/function index/patitional index(local/global) 索引通常能提高select/update/delete的性能,会降低insert的速度,8:使用索引查询一定能提高查询的性能吗?为什么索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同9:绑定变量是什么?绑定变量有什么优缺点?绑定变量是相对文本变量来讲的,所谓文本变量是指在sql直接书写查询条件,这样的sql在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,然后绑定执行。
阿里巴巴招募实习生笔试题目一、特别值是指什么?请列举1种识别连续型变量特别值的方法?特别值(Outlier) 是指样本中的个别值,其数值明显偏离所属样本的其余观测值。
在数理统计里一般是指一组观测值中与平均值的偏差超过两倍标准差的测定值。
Grubbs test(是以Frank E. Grubbs命名的),又叫maximum normed residual test,是一种用于单变量数据集特别值识别的统计检测,它假定数据集来自正态分布的总体。
未知总体标准差,在五种检验法中,优劣次序为:t检验法、格拉布斯检验法、峰度检验法、狄克逊检验法、偏度检验法。
点评:考察的内容是统计学根底功底。
二、什么是聚类分析?聚类算法有哪几种?请选择一种具体描述其计算原理和步骤。
聚类分析(cluster analysis)是一组将讨论对象分为相对同质的群组(clusters)的统计分析技术。
聚类分析也叫分类分析(classification analysis)或数值分类(numerical taxonomy)。
聚类与分类的不同在于,聚类所要求划分的类是未知的。
聚类分析计算方法主要有:层次的方法(hierarchical method)、划分方法(partitioning method)、基于密度的方法(density-based method)、基于网格的.方法(grid-based method)、基于模型的方法(model-based method)等。
其中,前两种算法是利用统计学定义的距离进展度量。
k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则依据它们与这些聚类中心的相像度(距离),分别将它们安排给与其最相像的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中全部对象的均值);不断重复这一过程直到标准测度函数开头收敛为止。
一般都采纳均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
阿里巴巴实习生招聘笔试题阿里巴巴实习生招聘笔试题阿里巴巴集团实习生招聘技术笔试卷姓名_________________身份证号_________________应聘职位_________________联系电话_________________电子邮件_________________学校_________________专业_________________学历_________________实习起止时间_______________答题说明:1.本试卷适用于应聘Java、测试、算法职位;2.公共题目必答,应聘不同职位方向,做答相应方向题目。
3.答题时间为60分钟,请把握时间;公共题选择题(每题5分)1. 若一棵二叉树具有10个度为2的结点,则该二叉树的度为0的结点个数是()A:9B:11C:12D:不确定2.下列排序算法中,其时间复杂度和记录的初始排列无关的是()A:插入排序B:堆排序C:快速排序D:冒泡排序3.已知中序遍历的序列为abcdef,高度最小的可能的二叉树的叶子是()A:ace B:acf C:adf D:cdf4.参加百年阿里培训的n位同学结伴去西湖旁边为游人指路,两人一组,她们打算先让体重之和恰好为102公斤的同学一组,请给出一个算法找到这样的组合,或者确定她们中不存在这样的组合,其中最优的算法时间复杂度为?(假设体重均为整数)()A:O(log(n))B:O(n)C:O(n log(n))D:O(n^2)5.众所周知数据结构中非常基本的树结构包括二叉查找树(BST)。
当我们把如下序列:10,5,19,4,13,7,6,3,1按顺序建立一棵BST时,树的最大深度是?(令根节点深度为0,执行不进行平衡的基本插入)()A:5B:4C:3D:26.阿里巴巴启用了新的办公大厦,这里的一切都充满了现代感;工程师们打算在娱乐区用大小相等的圆形材料分割出一些空间,使用A,B,C三个圆形材料,最多能够将空间分为八个区域(包括圆形以外的区域),如果给你五个圆形材料,你最多能够帮助工程师们分出多少个空间?()A:20B:22C:26D:32综合题(每题15分)1)分析Merge Sort的原理以及算法复杂度,并用最擅长的编程语言实现Merge Sort。
阿⾥巴巴算法⼯程师笔试题附加题最后⼀道附加题,当时搞来搞去的,没有搞好,昨天晚上敲了⼀下,今天拿来跟狄⽶特同学⽐试了⼀下速度,没想到竟然是我的快了(因为我⼏乎没有⽐他快过)。
题⽬描述:求第k⼤的因数只有3,5和7的数。
⽐如当k=1,2,3的时候答案应该为3,5,7。
笔试题就是这个样⼦,也不说k的密集程度(测试的时候会有多少个k),也不说k的范围,搞得⼈很纠结但是题上⾯说了,要求时间复杂度最⼩。
我的分析和解法:我们假设k的范围为1-n。
那么对于其中的每⼀个解,如果时间最优的话,最快可能是O(1),那么对于整个k的范围,可以采⽤O(n)的⽅法进⾏预处理,之后对于每⼀个k进⾏O(1)的输出。
关键的思想在于对于任意⼀个满⾜条件的数字⼀定是由之前的某个数字*3 、*5或者*7得到的。
那么就可以⽤类似动态规划的思想从3,5,7开始向后更新。
取3,5,7三个指针,每次⽤数字去乘以当前指针所指的数字(要求是这个数字之前没有出现过⽐如3*5 = 5*3这样会得到相同的结果),⽐较之后得到最⼩的,更新结果数组和指针。
设置ans[]⽤来存放结果。
p[3]表⽰3,5,7对应的指针(从⼯程的⾓度讲应该这样写吧)。
如此这般看来,关键的问题就在于如何判断重复的情况。
判断重复可以⽤的⽅法有:遍历⼀边之前的表,看是否存在重复的结果(这样的话,算法的复杂度就会退化到O(n*n),因为每⼀个数字都需要遍历。
),不好。
第⼆种⽅法,是这样,开⼀个⾜够⼤的数组,进⾏标记,每次查找某个数字x是否有重复时候就看mark[x]是否为0,如果不为0,那么证明这个数字可以⽤,并且将其标记为1。
这种⽅法,看似不错,但是还是有⼀些问题。
⾸先,当n⽐较⼤的时候,这个数组需要开⼗分⼤,才有可能包含所有的结果。
其次,这个数组是稀疏的数组,有很多空间会被浪费(因为只有3,5,7的倍数被标记了)。
所以这个办法也不是很可取。
第三种⽅法,开⼀个三维数组mark[i][j][k]进⾏标记。
试卷名称:阿里巴巴实习生笔试试卷
试卷描述:【微信考试】、【检验实力】、【挑战】。
考试形式:将试卷导入到>生成试卷二维码> 学生扫码练习> 自动排名。
学生也可查看错题,巩固知识后重答。
更多试卷,请访问百一测评网。
试卷链接:
试卷限时:分钟
一.单选题(共题)
是否题目乱序:是
是否选项乱序:是
是否可回溯:是
每题分值:分
1.[单选]设栈初始状态为空。
元素依次通过栈,若出栈的顺序为,则栈的容量至少
应该为。
A.
B.
C.
D.
答案:
2.[单选]个相同的糖果,分给三个人,每个人至少要得一个。
有种不同分法。
A.
B.
C.
D.
答案:
3.[单选]小数值的二进制表示是。
A.
B.
C.
D.
答案:
4.[单选]某二叉树的先序遍历是,中序遍历是,那么其后续遍历是。
A.、
B.、
C.、
D.、
答案:
5.[单选]主机甲和主机乙间已建立一个连接,主机甲向主机乙发送了两个连续的段,
分别包含字节和字节的有效载荷,第一个段的序列号为,主机乙正确接收到两个段后,发送给主机甲的确认序列号是。
A.
B.
C.
D.
答案:
6.[单选]在个乱序数字中查找第大的数字,时间复杂度可以减小至。
阿⾥笔试题⽬相关推荐阿⾥笔试题⽬2015 1、C++内存分配中说法错误的是 _____ A 对于栈来说,⽣长⽅向是向上的,也就是向着内存地址增加的⽅向 B 对于堆,⼤量的new/操作会造成内存空间不连续 C 堆容易产⽣memory leak D 堆的.效率⽐栈要低很多 E 栈变量引⽤容易逃逸 F 以上都对 2、全班100个学⽣,⽼师让玩如下⼀个游戏:每个学⽣在纸上写⼀个1到100之间的整数(含1和100),不能参考别⼈写的数字,谁的数字最接近所有数字的3/4,谁就会获得100元。
下⾯的数字中,最糟糕的选择是 _____ A 1 B 2 C 10 D 20 E 50 F 80 3、下列正则表达式不可以匹配“”的是_____ A ^\w+\.\W+\-\w+\.\w+$ B [w]{0,3}.[a-z\-]*.[a-z]+ C [c-w.]{3,10}[.][c-w.][.][a] D [w][w][w][alibaba-inc]+[com]+ E ^\w.*com$ F [w]{3}.[a-z\-]{11}.[a-z]{3} 4、关于UNIX系统代码段和数据段分开的⽬的,错误的说法有 _____ A 可共享正⽂ B 可共享数据 C 可重⼊ D 可保护代码为只读 E ⽅便编程 F 更好⽀持内存回收策略 5、下列关键字序列为堆的是 _____ A 100,60,70,50,32,65 B 60,70,65,50,32,100 C 65,100,70,32,50,60 D 70,65,100,32,50,60 E 32,50,100,70,65,60 F 50,100,70,65,60,32 6、⽤6块1*2的完整瓷砖,铺满2*6的地⾯,⼀共有 _____ 种不同铺法,不允许将瓷砖划分为⼩瓷砖。
A 13B 15 C22 D 24 E 25 F 26 7、设m和n都是int类型,那么⼀下for循环语句 _____ for(m=0,n=-1;n=0;m++,n++)n++; A 循环体⼀次也不执⾏ B 循环体执⾏⼀次 C ⽆限循环 D 有限次循环 E 循环结束判断条件不合法 F 运⾏出错 8、带头结点的单链表head为空的判断条件是 _____ A head==NULL B head->next=NULL C head->next==head D head!=NULL E *head==NULL F *(head->next)==NULL 9、硬币游戏:连续仍硬币,直到某⼀⼈获胜。
阿里巴巴在线笔试题-B卷笔试时间:2014-08-29选择题1、某团队有2/5的人会写Java程序,有3/4的人会写C++程序,这个团队里同时会写Java和C++的至少有(A )人A. 3B. 4C. 5D. 8E. 15F. 202、某团队负责人接到一个紧急项目,他要考虑在代号为ABCDEF这6个团队成员中的部分人员参加项目开发工作。
人选必须满足一下各点:(E)AB两人中至少一个人参加AD不能都去AEF三人中要派两人BC两人都去或都不去CD两人中有一人参加若D不参加,E也不参加那么最后()参加紧急项目开发。
A. ECEFB. AFC. ECFD. FE. ABCFF. ECDEF3、对立双方争夺一个价值为1的商品,双方可以采纳的策略可以分为鸽子策略和鹰策略。
如果双方都是鸽子策略,那么双方各有1/2的几率获得该物品;如果双方均为鹰策略,那么双方各有1/2的概率取胜,胜方获得价值为1的物品,付出价值为1的代价;如果一个为鸽子策略,一方为鹰策略,那么鹰策略获得价值为1的物品。
在争夺结果出来之前,没人知道对方是鸽子策略还是鹰策略。
当选择鸽子策略的人的比例是某一个值时,选择鸽子策略和选择鹰策略的预期收益是相同的。
那么该值是:CA. 0.2B. 0.4C. 0.5D. 0.7E. 0.8F. 以上都不对4、在小端机器中,如果union X{int x;char y[4];};如果:X a;a.x=0x11223344; //16进制则:A. a.y[0]=11B. a.y[1]=11C. a.y[2]=11D. a.y[3]=11E. a.y[0]=22F. a.y[3]=225. 下列关于线程调度的叙述中,错误的是 DA.调用线程的sleep()方法,可以使比当前线程优先级低的线程获得运行机会B.调用线程的yield()方法,可以使与当前线程相同优先级的线程获得运行机会C.当有比当前线程优先级高的线程出现时,高优先级线程将抢占CPU并运行.D. 一个线程由于某些原因进入阻塞状态,会放弃CPUE.具有相同优先级的多个线程的调度一定是分时的F. 分时调度模型是让所有线程轮流获得CPU使用权6. int main(){fork( )||fork( )}共创建几个进程:DA.1B.2C.3D.4E.5F.67、在一个双向循环链表中,指针p所指向的节点(非尾节点)之后插入指针s所指向的节点,其修改指针的操作是(C)A. p->next=s; s->prev=p; p->next->prev=s; s->next=p->next;B. p->next->prev=s; p->next=s; s->prev=p; s->next=p->next;C. p->next->prev=s; s->prev=p; p->next=s; s->next=p->next;D. s->prev=p; s->next=p->next; p->next->prev=s; p->next=s;E. s->next=p->next; s->prev=p; p->next=s; p->next->prev=s;8、下列选项中,(B)是一个典型的TCP客户端(主动建立连接,主动关闭连接)A. SYNC_SENT->ESTABLISHED->FIN_WAIT_1->FIN_W AIT_2->TIME_W AITB. SYNC_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->CLOSE_W AITC. SYNC_SENT->SYNC_RCVD->ESTABLISHED->FIN_W AIT1->FIN_WAIT2D. SYNC_RCVD->ESTABLISHED->CLOSE_WAIT->TIME_WAIT->LAST->ACKE. SYNC_RCVD->ESTABLISHED->CLOSE_W AIT->TIME_WAIT->FIN_WAIT1F. SYNC_SEND->ESTABLISHED->FIN_WAIT1->TIME_W AIT->CLOSE_W AIT9、某二维平面上有12个位置不同的点,通过连接其中任意两点,可以画出59条不同的直线。