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. PyalgoTrade 交易(五)

    我们继续采取简单的策略,这次模拟实际交易.这个想法很简单: 如果调整后的收盘价高于SMA(15),我们将进入多头仓位(我们下单买入市价). 如果调整后的收盘价低于SMA(15),我们退出多头头寸(我们 ...

  2. LG4777 【模板】扩展中国剩余定理(EXCRT)

    题意 题目描述 给定\(n\)组非负整数\(a_i, b_i\),求解关于\(x\)的方程组 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\e ...

  3. php 双引号字符串里包变量的用法

    第一种 $ary['a'] 去掉单引号$ary = array('a'=>1);$b = 5; $str = "fdsfdsf$ary[a]";$str = "fd ...

  4. ivy antlib shemalocation

    <?xml version="1.0" encoding="UTF-8"?> <project name="yourproject& ...

  5. 【monkeyrunner】浅谈包名和activity名

    概念理解 包名:顾名思义,包名即为程序app的包名. activity名:每个界面都是一个activity. 两者关系:一个包有多个activity. Monkeyrunner中 device.sta ...

  6. Linux SSH远程文件/目录 传输

    Linux SSH远程文件/目录传输命令scp 2010年08月6日 上午 | 作者:VPS侦探 相信各位VPSer在使用VPS时会经常在不同VPS间互相备份数据或者转移数据,大部分情况下VPS上都已 ...

  7. sysbench 0.5使用手册

    注意:本文刚开始只介绍了sysbench 0.5之前的版本,在了解了sysbench 0.5之后进行了补充,大部分测试和参数都是一样的,只是sysbench 0.5 在测试数据库方面更加全面丰富. 关 ...

  8. Webpack-simple cross-env 不是内部或外部命令问题处理

    本文转载自:https://www.cnblogs.com/stono/p/6984222.html Webpack-simple cross-env 不是内部或外部命令问题处理 学习了:https: ...

  9. 第2课 GUI程序实例分析

    1. GUI程序开发概述 (1)现代操作系统提供原生SDK支持GUI程序开发 (2)GUI程序开发是现代操作系统上的主流技术 (3)不同操作系统上的GUI开发原理相同 (4)不同操作系统上的GUI S ...

  10. 关于Ceph现状与未来的一些思考

    http://blog.csdn.net/mightysheldor/article/details/51093476 Ceph从2004年提交了第一行代码,至今为止已经10年了.这个起源于Sage博 ...