博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2345java面试笔试题_一道java笔试题 - rutine的个人空间 - OSCHINA - 中文开源技术交流社区...
阅读量:5939 次
发布时间:2019-06-19

本文共 1032 字,大约阅读时间需要 3 分钟。

今天去广州高亚面试,进门后有位HR接待,问我带简历没?我从文件夹中拿出一份简历递给她,然后她拿着一份java试题领我到一张办公台上开始做试题。试题仅有四道,全TMD是算法题,搞得我不知如何是好。因为之前参加的大多笔试中,很多题目都是一些基础题。所以到最后只有“气馁”两字,绝望放弃。

第一道题如是:  有一个包含N个Integer的向量(vector).它包含的Integer可以是 1 到 N + 1 之间任何一个,但是互不相同,也就是说vector 中不包含任何重复的值,以为有N个对象并且可能得值有 N + 1 个,所以有个一值没有包含在这个vector中,请编程,找到这个vector中没有包含的那个整数( 注意:只可以使用Vector.get(),Vector.getSize() );

当时没有审明白题目的意思,以为向量(vector)存储了 N + 1 个值,有N个是Integer类型的,其中一个是其他类型的或为NULL值。由于审题错误,造成没能够做出来,后来在百度中找到题目的原型及答案,才恍然大悟,犹如晴天霹雳,真郁闷,如下:

public int find(Vector v){

int n = v.size();

int result = 0;

for(int i=1;i<=n+1;i++){

boolean isExist = false;

for(int j=0;j

if(i == v.get(j)){

isExist = true;

break;

}

}

if(isExist == false){

result = i;

break;

}

}

return result; //返回0 证明传入的参数不符合规定或N+1个值都包含在vector中

}

略经思考,对上面网友所给的答案感觉不佳,算法复杂度为O(n2)。经过改良,得出如下:

public int find(Vector v){

int sum = 0, size = v.getSize();

int n = ((size + 1)*(1 + size + 1))/2; //等差为1的求和公式

for(int i=0; i

sum += v.get(i);

}

int missNum = -1;

if(sum > 0)

missNum = n -sum;

return missNum; //返回-1 证明传入的参数不符合规定或N+1个值都包含在vector中

}

转载地址:http://qqltx.baihongyu.com/

你可能感兴趣的文章
一個典型僵尸網絡淺析
查看>>
vmware克隆Centos6.4虚拟机网卡无法启动问题
查看>>
dba学习
查看>>
asterisk配置
查看>>
GA操作步骤和技巧(二)——用户行为分析
查看>>
shell中while循环里使用ssh的注意事项
查看>>
SHELL获取计算机外网ip的几种写法
查看>>
博客正在搬迁中
查看>>
触发器与存储过程的区别
查看>>
我的友情链接
查看>>
centos搭建supervisor
查看>>
linux日志分割
查看>>
Samba再报安全漏洞
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Spring学习资料之 依赖注入(一)
查看>>
安装win7提示安装程序无法创建新的系统分区和定位现有系统分区
查看>>
那些年,我跳过的坑(一)
查看>>
快递查询接口的调用与解析案例
查看>>
我的友情链接
查看>>