题目:

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. php和.net 的加密解密

    PHP版: $key = 335ff'; /* * 加密方法 * @param string $input,待加密的字符串 * @param string $key,加密的密码(只能为8位长) * @ ...

  2. Cocos2d-x项目移植到WinRT/Win8小记

    Cocos2d-x项目移植到WinRT/Win8小记 作者: K.C. 日期: 11/17/2013 Date: 2013-11-17 23:33 Title: Cocos2d-x项目移植到WinRT ...

  3. 【转】Mysql进程管理

    mysql> show processlist; +----+------+-----------+------+---------+------+-------+--------------- ...

  4. 個人最近做的最多的重複工作就是excel导出

    //导出事件,这个是有合并动态列的 double num1 = 0, num2 = 0, num3 = 0; protected void btnExcel_Click(object sender,  ...

  5. 《Pandoc用户指南》之一

    @(编程) 1. 描述 Pandoc是一个用于从一种标记格式转换为另一种的Haskell库,还是一个使用该库的命令行工具.它可以读取markdown格式和Textile格式(的子集).reStruct ...

  6. POJ1185状态压缩DP

    难得的中文题. POJ1185http://poj.org/problem?id=1185 方法就是用DP[i][r][p]表示第i行状态为r,第i-1行状态是p时的最多个数.而这里p受到r的限制,而 ...

  7. oracle创建用户赋予权限

    oracle用户创建及权限设置[转载] 权限: create session create table unlimited tablespace connect resource dba 例: #sq ...

  8. HDU 2066 一个人的旅行 - from lanshui_Yang

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  9. 15 Examples To Master Linux Command Line History

    When you are using Linux command line frequently, using the history effectively can be a major produ ...

  10. wpa_supplicant 连接成功后,如何配置wlan0与br0 协调上网

    wlan0 地址,路由配置完成后,加入两条iptables 规则. #iptables -A FORWARD -i wlan0 -o br0 -s -m state --state NEW -j AC ...