刷题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] ...
随机推荐
- vmware搭建linux环境
参考博文:https://www.cnblogs.com/wuzm/p/10877990.html
- PHP操作MYSQL数据库(10.11 第十九天)
一.连接及断开数据库 1.使用mysqli 扩展(推荐),只针对mysql数据库 面向对象的方式 $con = new mysqli(ip,user,password); if($con->co ...
- HDU - 3068 最长回文(manacher算法)
题意:给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 分析: manacher算法: 1.将字符串中每个字符的两边都插入一个特殊字符.(此操作的目的是,将字符串 ...
- 关于SI4432的问题简单讲解
对于SX1278 和SI4432的对比性,下面为大家展示对比参数: 由此可以看出的SI4432虽然跟SX1278有部分地方不同,但是整体来说还是差别不大,各有各的长处和短处,性价比上个人还是觉得SI4 ...
- Spring注解@ResponseBody
@Responsebody 将内容或对象作为http响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流. 写在方法上面表示:表示该方法的返回结果直接写 ...
- OC Swift混编-Swift.h File not found
https://www.jianshu.com/p/f860fe1718ca 2016.09.13 11:53* 字数 266 阅读 1935评论 1喜欢 1 今天碰到个神坑,本人项目是OC项目,最近 ...
- 学术Essay写作中Introduction的正确打开方式
其实在学术essay写作过程中,很多留学生经常不知道如何写introduction,所以有些开头的模板句就出现了,比如,With the development of society/With the ...
- 2020/1/31 PHP代码审计之文件包含漏洞
0x00 文件包含简介 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校检,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意 ...
- POJ 1062:昂贵的聘礼
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40715 Accepted: 11839 Descripti ...
- 13. react 基础 redux 的基本介绍 及 用 antd 编写 TodoList 的样式
1. redux 简述 当 store 内的 数据进行变更的时候 多个组件感知到 store 内的数据变化 将会被自动更新 2. redux 工作流 Store 代表数据存储 (例如: 图书馆管理 ...