刷题41. First Missing Positive
2024-09-01 00:25:32
一、题目说明
题目是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;
}
};
最新文章
- jquery.uploadify文件上传组件
- RecyclerView的介绍与使用
- 每天一个linux命令(25):linux文件属性详解
- SQL注入的分类
- seajs 源码阅读笔记
- 烂泥:mysql5.5多实例部署
- centos 命令集合
- RESTful框架调研
- 简单几何(相对运动距离最值) UVA 11796 Dog Distance
- web_custom_request函数详解
- phalcon: 视图集成(内嵌模板)
- HTTP与HttpServlet
- Android开发中Ant命令编译和APK签名的一些心得
- 51Nod 算法马拉松12 Rikka with sequences
- 【并查集】PKU-1182 食物链
- Xcode中,调试console窗口输出error: Couldn&#39;t materialize struct: the variable &#39;cell&#39; has no location, it may have been optimized out的问题
- .NET自动字符编码识别程序库 NChardet
- iOS开发 调用系统相机和相册 分类: ios技术 2015-03-30 15:52 65人阅读 评论(0) 收藏
- METRO风格
- 变量、交互&;注释、数字&;字符串&;布尔、格式化输出
热门文章
- CCCC L3-015. 球队“食物链”(dfs+剪枝)
- UVA - 1606 Amphiphilic Carbon Molecules(两亲性分子)(扫描法)
- 修改虚拟机ip
- https://www.jianshu.com/p/fc78dab5736f
- NCRE的JAVA二级考试大纲
- mysql第四篇:数据操作
- 2020/1/30 PHP代码审计之CSRF漏洞
- 读取cookie、写进cookie方法
- zookeeper基础教程
- c++ 深度优先算法