41. First Missing Positive (HashTable)
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)的更多相关文章
- 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
		一.题目说明 题目是41. First Missing Positive,求一个未排序队列中缺失的最小正整数.时间复杂度要求是O(n).难度是Hard,确实难. 二.我的解答 不考虑时间复杂度,首先对 ... 
- [LeetCode] 41. First Missing Positive 首个缺失的正数
		Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ... 
- 41. First Missing Positive (JAVA)
		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] ... 
- 41. First Missing Positive
		题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ... 
随机推荐
- linux内存查看工具
			这里帮你总结了一下Linux下查看内存使用情况的多种方法~ 在做 Linux 系统优化的时候,物理内存是其中最重要的一方面.自然的,Linux 也提供了非常多的方法来监控宝贵的内存资源的使用情况.下面 ... 
- Winform工具栏ToolStrip和状态栏StatusStrip
			工具栏和状态栏的设置与前面的菜单基本相似 1.ToolStrip 从工具栏选项卡上拖一个放入窗体即可,位置也是通过其Dock设置的.先上一张图,红色部分就是工具栏,工具栏中可以放置如图下拉菜单中的Bu ... 
- HDU 2175
			http://acm.hdu.edu.cn/showproblem.php?pid=2175 做得好辛苦的一道规律题,至于为什么辛苦..dont ask me why... n号盘子出现的位置是(1, ... 
- 创建一个新的进程os.fork
			import os pid = os.fork()功能:创建新的进程参数:无返回值:失败返回一个负数 成功:在原有进程中返回一个新的进程的PID号 在新的进程中返回0 *子进程会复制父进程全部代码段, ... 
- windows server 2008 r2 修改远程登入的端口号(3389)
			步骤:打开“开始→运行”,输入“regedit”,打开注册表,进入以下路径:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal ... 
- test20181024 nan
			题意 nan 问题描述 我们有一个序列,现在他里面有三个数1,2,2.我们从第三个数开始考虑: 第三个数是2,所以我们在序列后面写2个3,变成1,2,2,3,3. 第四个数是3,所以我们在序列后面写3 ... 
- SEO -- WP如何建立SiteMap
			站点地图对网站的seo优化有着相当重要的作用,而WordPress的优势就是插件特别的多,也特别符合蜘蛛的口味,在wp上建立站点地图是相当简单的事情,只需要一款插件和几步简单的配置 Google XM ... 
- solr5.5.0在CenOS上的安装与配置
			solr5.5.0在CenOS上的安装与配置 1. Solr简介 Solr是一个基于Lucene的Java搜索引擎服务器.Solr 提供了层面搜索.命中醒目显示并且支持多种输出格式(包括 XML/XS ... 
- java的堆和栈
			初始入门嗯:https://www.cnblogs.com/SaraMoring/p/5687466.html 堆空间:new出来的数组和对象,对象和数组没有引用指向它的时候,等待下一次垃圾回收 栈空 ... 
- spring 源码如何导入到eclipse
			spring 源码如何导入到eclipse spring源码解析——spring源码导入eclipse spring framework源码下载并导入eclipse 
