欢迎使用CSDN-markdown编辑器
2015-09-19 20:29
441 查看
今天去乐视笔试的一个题目。题目大意如下,给一个整数序列,找出其中没出现过的最小的正整数。
如输入:1,2,0。则未出现的最小正整数是3。
如输入:3,3,2,-1。则未出现的最小正整数是2。
要求时间复杂度O(N),空间复杂度是N(1)。
这个一开始确实是不知道怎么做,主要是这个复杂度限制。后来经过讨论,终于想到了一个办法。即采用本地数组的空间,将正整数k放在第k-1位。再重头过一遍,即可知道哪个数没出现过了。
具体代码如下。
如输入:1,2,0。则未出现的最小正整数是3。
如输入:3,3,2,-1。则未出现的最小正整数是2。
要求时间复杂度O(N),空间复杂度是N(1)。
这个一开始确实是不知道怎么做,主要是这个复杂度限制。后来经过讨论,终于想到了一个办法。即采用本地数组的空间,将正整数k放在第k-1位。再重头过一遍,即可知道哪个数没出现过了。
具体代码如下。
[code]//最小的不存在的正整数 int minNonExist(int[]arr){ int next=-1; while(++next<arr.length){ int tmp=arr[next]; while(tmp>=1&&tmp<=arr.length&&arr[tmp-1]!=tmp){ int t2=arr[tmp-1]; arr[tmp-1]=tmp; tmp=t2; } } for(int k=0;k<arr.length;++k) if(arr[k]!=k+1) return k+1; return arr.length+1; }
相关文章推荐
- Xcode 7免证书真机调试
- 打击犯罪 解题报告
- Mysql错误消息 语言设置
- HDU 5461.Largest Point【2015 ACM/ICPC Asia Regional Shenyang Online】【排序】9月19
- Clarke and minecraft
- 利用servlet来实现动态页面的提交效果
- iOS9适配系列教程
- POJ 2151 Check the difficulty of problems
- Mac OS启动服务优化高级篇
- Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化
- TestLink知识点Mantis知识点
- MAC终端简单命令(更新ing)
- 获取tinyMCE编辑器中的内容
- 学习dojo一个很好的网址:有很多小例子
- 对DevExpress GridControl控件,实现通过checkbox选中时整行高亮
- css知多少(11)——position
- 把《Effective C++》读薄
- Codeforces Round #320 (Div. 2) 579A Raising Bacteria(脑洞)
- 把《Effective C++》读薄
- jspEL的表达式<c:if ne>