一、题目说明

题目是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的更多相关文章

  1. LeetCode - 41. First Missing Positive

    41. First Missing Positive Problem's Link ---------------------------------------------------------- ...

  2. [Leetcode][Python]41: First Missing Positive

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 41: First Missing Positivehttps://oj.le ...

  3. [array] leetcode - 41. First Missing Positive - Hard

    leetcode - 41. First Missing Positive - Hard descrition Given an unsorted integer array, find the fi ...

  4. LeetCode题解41.First Missing Positive

    41. First Missing Positive Given an unsorted integer array, find the first missing positive integer. ...

  5. 41. First Missing Positive

    题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...

  6. [LeetCode] 41. First Missing Positive ☆☆☆☆☆(第一个丢失的正数)

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  7. leetCode 41.First Missing Positive (第一个丢失的正数) 解题思路和方法

    First Missing Positive  Given an unsorted integer array, find the first missing positive integer. Fo ...

  8. [LeetCode] 41. First Missing Positive 首个缺失的正数

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  9. leetcode 41 First Missing Positive ---java

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

随机推荐

  1. elasticsearch下载与安装

    目录 安装之前 下载 安装 测试 安装之前 必须注意的是:安装路径不允许有中文及空格和非法字符,尤其是中文 下载 打开elasticsearch官网.选择免费试用. 选择对应产品与版本(选择6.5.4 ...

  2. Python之日志处理(logging模块)《转载》

    Python之日志处理(logging模块): https://www.cnblogs.com/yyds/p/6901864.html

  3. Spring Boot2(001):入门介绍和一些官网链接参考

    Spring官方文档比较齐全,学习的过程中可以多参考官方文档,最权威的版本.01.Spring Boot的一些官方链接 01.01 Spring Boot官网 https://spring.io/pr ...

  4. C++的模板类:不能将定义与声明写在不同文件中

    问题来源 今天看了orbslam2自带的第三方库DBoW2的TemplatedVocabulary.h文件,发现其中模板类的函数成员的定义与声明放在了同一个文件:同时发现,DBoW2的CMakeLis ...

  5. 文献及代码阅读报告 - SS-LSTM:A Hierarchical LSTM Model for Pedestrian Trajectory Prediction

    概览 简述 SS-LSTM全称Social-Scene-LSTM,是一种分层的LSTM模型,在已有的考虑相邻路人之间影响的Social-LSTM模型之上额外增加考虑了行人背景的因素.SS-LSTM架构 ...

  6. centos 7.4 安装docker 19.03.6 版本。附带离线安装包

    说明: 1.此环境为未安装过docker服务的环境, 如果已经安装,则自行卸载. 2.以下环境中上传的包及离线yum源默认为/home目录下,如无特殊说明,以此目录为准 步骤一:下载docker离线安 ...

  7. Python win32api.keybd_event模拟键盘输入

    win32api.keybd_event 该函数原型:keybd_event(bVk, bScan, dwFlags, dwExtraInfo) 第一个参数:虚拟键码(键盘键码对照表见附录): 第二个 ...

  8. Android自定义View——彩色圆环统计图

      1.初始化变量 圆的粗细:圆环的大小. 标注:文字前面的圆点. 分配比例大小:由于需要计算圆环扫过的角度,计算方法使用:(比例/100)*360度,用百分比算出360度占用了多少,由于比例/100 ...

  9. PAT Advanced A1021 Deepest Root (25) [图的遍历,DFS,计算连通分量的个数,BFS,并查集]

    题目 A graph which is connected and acyclic can be considered a tree. The height of the tree depends o ...

  10. 洛谷 P5662 纪念品

    题目传送门 解题思路: 一道DP,完全背包,不过有点不同于模板.因为本题的每件物品可自由在不同的时间买卖,且不同时间价格不同. 这道题的关键在于要明白一个非常傻逼的性质,就是我在某天买了第i个物品,然 ...