一、题目说明

题目是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. java课程之团队开发冲刺阶段2.7

    昨日总结: 1.完整实现课前闹钟提醒功能 遇到的困难: 1.没有遇到大的问题,细节地方没有处理好出现了一下小的情况 今天的任务: 1.实现对课程查询的完整实现 当日总结: 1.以前是使用二级联动下拉框 ...

  2. tortoiseGit 的简单使用说明

    拉取仓库到本地 参考 下面几张图片,把仓库拉取到本地. 本地修改并推送 进入文件夹后,按照 下面几张图片切换到本地的开发分支 当修改完成之后,按照 下面几张图片 的方法把修改推送到远程仓库的开发分支. ...

  3. Linux 下 OpenCV3 安装

    编译安装OpenCV3 从官网下载:http://opencv.org/releases.html 选择一个较新版本的opencv3.X,下载source源代码 下载之后解压,并cd到该文件夹进行编译 ...

  4. Map—数据结构

    map是数据结构的一种,map总是以key-value的形式保存数据的, 根据key来查找value的值,但是key的值是唯一的,在同一个map中不能重复. 常用的实现类java.util.hashM ...

  5. h5页面乱码-设置编码

    1.h5页面正常,重定向以后出现乱码,如图所示. 解决办法:重定向的时候 需要设置编码. 2.文件charset已经是utf-8,页面还是乱码,文件保存的格式也要是utf-8的哦

  6. python学习---format、当前时间

    1.数字格式化   format <  :左对齐 >  :右对齐 a = “随机数是{:>4d}”.format(1)       结果是0001 2.当前时间 import dat ...

  7. AD软件将PCB中的元器件旋转45度

  8. AT2000 Leftmost Ball 解题报告

    题面 给你n种颜色的球,每个球有k个,把这n*k个球排成一排,把每一种颜色的最左边出现的球涂成白色(初始球不包含白色),求有多少种不同的颜色序列,答案对1e9+7取模 解法 设\(f(i,\;j)\) ...

  9. vue点击变色

    <template> <div> <router-link to="/w1">点击回去</router-link> <div ...

  10. pywin32获得tkinter的Canvas窗口句柄,并在上面绘图

    上一篇博文获得主窗口句柄使用的是root.frame或者通过子控件调用master.frame方法,但是子控件本身没有frame方法.那么怎么获得子控件的句柄呢?试过了很多办法,想过把Canvas当作 ...