刷题41. First Missing Positive
一、题目说明
题目是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;
}
};
刷题41. First Missing Positive的更多相关文章
- LeetCode - 41. First Missing Positive
41. First Missing Positive Problem's Link ---------------------------------------------------------- ...
- [Leetcode][Python]41: First Missing Positive
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 41: First Missing Positivehttps://oj.le ...
- [array] leetcode - 41. First Missing Positive - Hard
leetcode - 41. First Missing Positive - Hard descrition Given an unsorted integer array, find the fi ...
- LeetCode题解41.First Missing Positive
41. First Missing Positive Given an unsorted integer array, find the first missing positive integer. ...
- 41. First Missing Positive
题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...
- [LeetCode] 41. First Missing Positive ☆☆☆☆☆(第一个丢失的正数)
Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...
- leetCode 41.First Missing Positive (第一个丢失的正数) 解题思路和方法
First Missing Positive Given an unsorted integer array, find the first missing positive integer. Fo ...
- [LeetCode] 41. First Missing Positive 首个缺失的正数
Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...
- leetcode 41 First Missing Positive ---java
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
随机推荐
- Python 简单统记Log 日记 下次用:python的内置logging模块 easy
环境 win7 先来new一点log 日记 日记包含 "reason=", "error=" 两个log级别 存放在D盘下得LOG目录下 先来 生 ...
- CentOS下的安装命令 安装Nginx 更新yum源 kali系统当中的软件管理命令(第五天)
Linux下软件的安装:方式:yum/rpm/源码安装YUM安装(帮助管理员解决依赖关系):yum search mysqld 在源中搜索软件包yum install mysql-connector- ...
- python_生成器小结
#__author : "ziChuan" #__data : 2019/7/19 import random # print(random.random()) # print(r ...
- 深入理解class
一, class和自定义类型的区别: 1,类声明不会被提升. 2,类声明的代码自动运行在严格模式. 3,类的所有方法都是不可枚举的,而自定的方法必须使用Object.defineProperty来设置 ...
- Hibernate(八)--session的两种获取方式
openSession getCurrentSession Hibernate有两种方式获得session,分别是: openSession和getCurrentSession他们的区别在于1. 获取 ...
- iOS 保存图片(视频)到相册
1.C语言函数方式实现 注意:UIImageWriteToSavedPhotosAlbum方法必须实现代理方法,否则会崩溃. //参数1:图片对象 //参数2:成功方法绑定的target //参数3: ...
- Day 9:双列集合Map及实现该接口的类的常用方法
为什么要学双列集合? 因为单列集合无法处理映射关系,会有成对出现的数据 Map接口 如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复 Map接 ...
- POJ 2006:Litmus Test 化学公式
Litmus Test Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1709 Accepted: 897 Descri ...
- VMware Workstation 12 PRo密钥
注意:手动输入(起初复制输入,一个都没成功,不要偷懒哦) VMware Workstation 12序列号: 5A02H-AU243-TZJ49-GTC7K-3C61N
- eclipse中tomcat添加或移除web项目出错,显示无资源能被添加或移除
错误截图 之前一直都能正常使用,今天莫名其妙出现这个错误 解决办法 https://blog.csdn.net/u012956987/article/details/79134474 右击项目,在属性 ...