一、题目说明

题目是41. First Missing Positive,求一个未排序队列中缺失的最小正整数。时间复杂度要求是O(n)。难度是Hard,确实难。

二、我的解答

不考虑时间复杂度,首先对队列进行排序,然后从第一个正数开始,如果不是1就返回1,否则继续查找2....找不到就返回,找到就继续。

代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
class Solution{
public:
int firstMissingPositive(vector<int>& nums){
sort(nums.begin(),nums.end());
int cur = 1; int start = 0;
while(start<nums.size() && nums[start]<=0){
start++;
} if(start>= nums.size()){
return 1;
}
if(nums[start] != 1){
return 1;
}else{
for(int t=start;t<nums.size();t++){
if(nums[t] == cur){
cur++;
}
if(nums[t]<=cur){
continue;
}
} if(cur==nums[nums.size()-1]){
cur++;
}
} return cur;
}
};
int main(){
Solution s;
vector<int> r; r = {1,2,0};
cout<<(3==s.firstMissingPositive(r))<<"\n"; r = {3,4,-1,1};
cout<<(2==s.firstMissingPositive(r))<<"\n"; r = {7,8,9,11,12};
cout<<(1==s.firstMissingPositive(r))<<"\n"; r = {0,2,2,1,1};
cout<<(3==s.firstMissingPositive(r))<<"\n"; r = {1,2,3};
cout<<(4==s.firstMissingPositive(r))<<"\n";
return 0;
}

性能如下:

Runtime: 4 ms, faster than 65.35% of C++ online submissions for First Missing Positive.
Memory Usage: 8.6 MB, less than 92.00% of C++ online submissions for First Missing Positive.

三、优化措施

上述实现,排序的时间复杂度一般是O(Nlog(N)),是不满足要求的。对于这个未排序的队列,可以这样处理:从第1个数开始,负数不做处理,如果nums[i] != 1+i,就将nums[i]和 nums[nums[i] - 1]交换,一个循环就可以了。代码如下:

class Solution{
public:
int firstMissingPositive(vector<int>& nums){
int len = nums.size();
for(int i=0;i<len;){
if(nums[i]<=len && nums[i]>=1 && nums[i]!=nums[nums[i]-1]){
int temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}else{
i++;
}
} int i=0;
while(i<len && i+1==nums[i]){
i++;
}
return i+1;
}
};

最新文章

  1. jquery.uploadify文件上传组件
  2. RecyclerView的介绍与使用
  3. 每天一个linux命令(25):linux文件属性详解
  4. SQL注入的分类
  5. seajs 源码阅读笔记
  6. 烂泥:mysql5.5多实例部署
  7. centos 命令集合
  8. RESTful框架调研
  9. 简单几何(相对运动距离最值) UVA 11796 Dog Distance
  10. web_custom_request函数详解
  11. phalcon: 视图集成(内嵌模板)
  12. HTTP与HttpServlet
  13. Android开发中Ant命令编译和APK签名的一些心得
  14. 51Nod 算法马拉松12 Rikka with sequences
  15. 【并查集】PKU-1182 食物链
  16. Xcode中,调试console窗口输出error: Couldn&#39;t materialize struct: the variable &#39;cell&#39; has no location, it may have been optimized out的问题
  17. .NET自动字符编码识别程序库 NChardet
  18. iOS开发 调用系统相机和相册 分类: ios技术 2015-03-30 15:52 65人阅读 评论(0) 收藏
  19. METRO风格
  20. 变量、交互&amp;注释、数字&amp;字符串&amp;布尔、格式化输出

热门文章

  1. CCCC L3-015. 球队“食物链”(dfs+剪枝)
  2. UVA - 1606 Amphiphilic Carbon Molecules(两亲性分子)(扫描法)
  3. 修改虚拟机ip
  4. https://www.jianshu.com/p/fc78dab5736f
  5. NCRE的JAVA二级考试大纲
  6. mysql第四篇:数据操作
  7. 2020/1/30 PHP代码审计之CSRF漏洞
  8. 读取cookie、写进cookie方法
  9. zookeeper基础教程
  10. c++ 深度优先算法