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.

思路:n个数,可能的最大正整数是n,所以可以将这n个数作为哈希值。但是这样要有O(n)的额外空间。

解决方法是复用A[], 首先将A[i]中的负数剔出(标记为n+1);第二次遍历时,将<=n的正整数交换到下标为n-1的位置。

class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int size = nums.size();
int tmp,i;
for(i =; i < size; i++){
if(nums[i]<=) nums[i]=size+;
} i = ;
while(i < size){
if(nums[i]<=size && nums[i]!=i+){
if(nums[nums[i]-]==nums[i]){//repeat digit occurs
nums[i]=size+;
i++;
}
else{
tmp=nums[nums[i]-];
nums[nums[i]-]=nums[i];
nums[i]=tmp;
}
}
else{
i++;
}
} for(int i = ; i < size; i++){
if(nums[i]!=i+){
if(i>) return nums[i-]+;
else return ;
}
}
return size+;
}
};

改进: 我们可以不用tmp进行交换,省去O(1)的空间,也减少赋值的次数。当遍历到一个整数cur的时候,将A[cur]变成相反数,这样A[i]<0的i位置表示i出现过了,还保证了A[i]原来的值没被破坏(可以通过abs(A[i])获得)。

class Solution {
public:
int firstMissingPositive(int A[], int n) {
int i;
for (i = ; i < n; i++)
if(A[i]<=) A[i] = n+;
for (i = ; i < n; i++) {
if(abs(A[i]) <= n ){ //需要abs,因为在for循环中,我们将值为[1,n]的元素改成了负数
int cur = abs(A[i])-;
A[cur] = -abs(A[cur]);
}
}
for (i = ; i < n; i++) {
if (A[i] > ) return i+;
}
return n+;
}
};

41. First Missing Positive (HashTable)的更多相关文章

  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

    一.题目说明 题目是41. First Missing Positive,求一个未排序队列中缺失的最小正整数.时间复杂度要求是O(n).难度是Hard,确实难. 二.我的解答 不考虑时间复杂度,首先对 ...

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

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

  7. 41. First Missing Positive (JAVA)

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

  8. leetcode 41 First Missing Positive ---java

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

  9. 41. First Missing Positive

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

随机推荐

  1. MyEclipse10 中设置Jquery提醒,亲测可用

    最近做练习需要用到Jquery,在myeclipse中默认没有提示功能.然后在网上找解决方案,有一种方案说使用spket,然后搜索安装,折腾了半天还是不行,脑细胞死掉几百个.. 然后在网上搜到另外一种 ...

  2. C# #if, #else和#endif预处理指令

        #if 使您可以开始条件指令,测试一个或多个符号以查看它们是否计算为 true.如果它们的计算结果确实为true,则编译器将计算位于 #if 与最近的 #endif 指令之间的所有代码.例如, ...

  3. contentType 'text/xml; charset=UTF-8' conflicts问题

    Resin升级到3.1.3后,有同事发现原来在Resin 3.0.xx下成功运行的部分jsp文件(输出xml格式文件)编译出错: 1234567 500 Servlet Exception XXXXX ...

  4. Centos7 环境下开机 自启动服务(service) 设置的改变 (命令systemctl 和 chkconfig用法区别比较)

    参考文章:  <Linux 设置程序开机自启动 (命令systemctl 和 chkconfig用法区别比较)> http://blog.csdn.net/kenhins/article/ ...

  5. 【liunx】nslookup命令

    “nslookup”域名解析是什么? 假设我们要开个网站,首先我们要去提供域名申请的机构申请域名,然后绑定一个IP地址, 域名比较容易记忆,不像IP地址都是数字,申请完域名,绑定域名,DNS就写入域名 ...

  6. python zfill方法给字符串前面补0

    正数补前面补0 n = " s = n.zfill(5) " zfill()也可以给负数补0 n = "-123" s = n.zfill(5) assert ...

  7. windows上如何安装Sqlite

    一.安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Windows下的包下载下来sqlite-dll-win ...

  8. .NET可变性解析(协变和逆变)

    [一]何为可变性 可变性是.NET4.0中的一个新特性,可变性可分为 : 协变性.逆变性.不可变性. 那么在.NET4.0之前是否有可变性? 答案是肯定的,我们可以通过下面的几个实例来简单的了解一下. ...

  9. IE8 focus 失效解决方案

    这几天遇到两个在IE8下focus失效的非常奇怪的问题,当然这个是指JS函数: document.getElementById("id").focus(); 或者 $(" ...

  10. iPhone应用提交流程:如何将App程序发布到App Store

    http://www.techolics.com/apple/20120401_197.html 对于刚加入iOS应用开发行列的开发者来说,终于经过艰苦的Coding后完成了第一个应用后最重要的历史时 ...