博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】First Missing Positive
阅读量:5232 次
发布时间:2019-06-14

本文共 1107 字,大约阅读时间需要 3 分钟。

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.


题解:开始想的是用一个hashmap保存数组中的每个值,然后遍历数组看看每个值-1和+1的值在不在map里面,后来发现只要用常数空间。就只能另想方法。

其实我们可以用原来的数组作为hash表,使得A[i] = i+1,通过不停的交换做到这一点,那么最后A[i] != i+1的i+1就是missing的数;

因为数组中除了missing的值,其他值都是连续的,所以数组中可能存放的最大值是n+1;

以题目中的例子为例:

最终A[1] != 1+1 = 2,所以缺失的2;

代码如下:

1 public class Solution { 2     private void swap(int[] A,int a,int b){ 3         int temp = A[a]; 4         A[a] = A[b]; 5         A[b] = temp; 6     } 7     public int firstMissingPositive(int[] A) { 8         //make A[i] = i+1 9         for(int i = 0;i < A.length;i++){10             while(A[i] <= A.length && A[i] > 0 && A[i] != i+1 && A[i] != A[A[i]-1])11                 swap(A, i, A[i]-1);12         }13         14         //find the missing one15         for(int i = 0;i < A.length;i++)16             if(A[i] != i+1 )17                 return i+1;18         19         return A.length+1;20     }21 }

转载于:https://www.cnblogs.com/sunshineatnoon/p/3855337.html

你可能感兴趣的文章
vue:axios二次封装,接口统一存放
查看>>
vue中router与route的区别
查看>>
js 时间对象方法
查看>>
网络请求返回HTTP状态码(404,400,500)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>
Mac下使用crontab来实现定时任务
查看>>
303. Range Sum Query - Immutable
查看>>
图片加载失败显示默认图片占位符
查看>>
【★】浅谈计算机与随机数
查看>>
《代码阅读方法与实现》阅读笔记一
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>