题目:

Given an unsorted integer array, find the first missing positive integer.

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.(Hard)

分析:

如果题目要求是O(n^2)时间复杂度,O(1)空间复杂度,或O(n)时间复杂度和O(n)空间复杂度,问题都是好解的。

前者从1开始,对每个数遍历一遍数组即可,发现没有的返回;

后者开辟一个数组flag,flag[i] == 0 或 1表示是否出现过,遍历一遍把flag填充上,再遍历一遍找到第一个没有出现过的数即可。

题目要求O(n)时间复杂度和O(1)空间复杂度,则要考虑在nums数组本身上面做文章。

考虑通过交换使得nums[i]存 i + 1,这样从头遍历找到第一个不满足的位置即可。

交换方案就是用nums[i]与 nums[nums[i] - 1]交换,直到nums[i] == i + 1或 i 超过数组范围(0...size())。

注意:加nums[i] != nums[nums[i] - 1]判断语句(见代码第6行),否则可能出现死循环。

时间复杂度,因为每次交换都会有一个元素到达正确位置,所以复杂度O(n)

代码:

 class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int i = ;
while (i < nums.size()) {
if (nums[i] > && nums[i] <= nums.size() && nums[i] != i + && nums[i] != nums[nums[i] - ]) { //nums[i] != nums[nums[i] - 1] 否则类似[1,1]
swap(nums[i], nums[nums[i] - ])
}
else {
i++;
}
}
for (int j = ; j < nums.size(); ++j) {
if (nums[j] != j + ) {
return j + ;
}
}
return nums.size() + ;
}
};
 

LeetCode41 First Missing Positive的更多相关文章

  1. [Swift]LeetCode41. 缺失的第一个正数 | First Missing Positive

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

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

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

  3. Leetcode First Missing Positive

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

  4. 【leetcode】First Missing Positive

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

  5. 【leetcode】First Missing Positive(hard) ☆

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

  6. LeetCode - 41. First Missing Positive

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

  7. LeetCode题解-----First Missing Positive

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

  8. Java for LeetCode 041 First Missing Positive

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

  9. [LeetCode]题解(python):041-First Missing Positive

    题目来源 https://leetcode.com/problems/first-missing-positive/ Given an unsorted integer array, find the ...

随机推荐

  1. 第三百四十一天 how can I 坚持

    不好,有点肚子疼,凉肚子了. 今天晚上回来看了个电影<聚焦>,貌似明白了一个道理,任何一份职业,只要认识到了它的价值,那就好好干. 计划又放在脑门后了,上班又闲扯了一天.老季公司招人,让我 ...

  2. Event Functions

    [Event Functions] A key concept in games programming is that of making changes to position, state an ...

  3. Window服务初级教程以及log4net配置文件初始化

    Window服务初级教程:http://www.jb51.net/article/48987.htm 另外,配置log4net这个日志功能的时候需要初始化,不然会报没有初始化的错误,而且初始化的节点应 ...

  4. [置顶] Linux信号相关笔记

    最近又温习了一遍Linux中的信号知识,发现有很多东西以前没有注意到,就通过这篇博客记录一下,巩固一下知识点. 一,信号基础: 信号是什么?为了回答这个问题,首先要从异常说起,这里的异常不是指c++/ ...

  5. 【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布 ...

  6. PHP发送邮件。

    第三方类库: ①.email.class.php. ②.phpmailer:https://github.com/PHPMailer/PHPMailer. PHPMailer发送邮件”SMTP 错误: ...

  7. NLog官方文档

    NLog快速使用 NLog配置 NLog通过代码定义配置 Target Layouts Layout Renderers

  8. ASP.net中GridView中增加一行记录并默认显示为编辑状态

    //添加 protected void Button1_Click(object sender, EventArgs e) { DataSet ds = (DataSet)pa.GetDataSet( ...

  9. WP8异常错误:Error HRESULT E_FAIL has been returned from a call to a COM component.

    在做WP8开发的过程中,使用到了longlistselector这个控件,本来使用没有问题. 但是突然出现了一个闪退的错误,错误信息如下: {MS.Internal.WrappedException: ...

  10. HDU 5584 LCM Walk 数学

    LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ...