LeetCode题解-----First Missing Positive
2016-02-18 22:10
656 查看
Given an unsorted integer array, find the first missing positive integer.
For example,
Given
and
Your algorithm should run in O(n) time and uses constant space.
分析:
因为数组的大小为n,因此那个缺失的整数只可能的范围[1,n+1]
方法一:需要O(n)的空间,设置一个数组vis用来标记该下标对应的数字是否出现过。
方法二:将数组中值在1~n的数组元素放到对应下标为该值减1的地方。例如: A[3]=2,则将A[2-1]与A[3]进行交换。最后遍历数组直到元素值不等于下标值加一,则该下标加一 就是第一个缺失的正整数
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,因此那个缺失的整数只可能的范围[1,n+1]
方法一:需要O(n)的空间,设置一个数组vis用来标记该下标对应的数字是否出现过。
int firstMissingPositive(int* nums, int numsSize) { int vis[10000]; int i; for(i=1;i<=numsSize;i++){ vis[i]=0; } for(i=0;i<numsSize;i++){ if(nums[i]>0&&nums[i]<=numsSize){ vis[nums[i]]=1; } } for(i=1;i<=numsSize;i++){ if(vis[i]==0){ return i; } } return numsSize+1; }
方法二:将数组中值在1~n的数组元素放到对应下标为该值减1的地方。例如: A[3]=2,则将A[2-1]与A[3]进行交换。最后遍历数组直到元素值不等于下标值加一,则该下标加一 就是第一个缺失的正整数
int firstMissingPositive(int* nums, int numsSize) { int i,t; for(i=0;i<numsSize;i++){ while(nums[i]!=(i+1)&&nums[i]>0&&nums[i]<=numsSize){ //保证每个元素回到适当的位置 if(nums[nums[i]-1]==nums[i]){ break; } t=nums[nums[i]-1]; nums[nums[i]-1]=nums[i]; nums[i]=t; } } for(i=0;i<numsSize;i++){ if(nums[i]!=(i+1)){ return i+1; } } return numsSize+1; }
相关文章推荐
- bss 概念
- WEB开发中常见错误原因
- 1090. Highest Price in Supply Chain (25)
- 5.WEB版QQ多人聊天,带离线留言功能
- 算法竞赛入门经典 竖式问题
- ArcGIS for Android地图控件的5大常见操作转
- 封印术:shadow dom
- matplotlib 中文标签乱码问题
- 1089. Insert or Merge (25)
- iOS archive(归档)的总结
- 负载均衡调度算法大全(轮循,加权轮循,固定权重,加权最少连接,最少连接数)
- tomcat7.0的部署
- jQuery 调用 ajax
- iOS 【iOS-切换控制器的手段及异同】
- Mac使用命令行修改时区为中国且24小时制
- [转]搞ACM的你伤不起(转自Roba大神)
- HDU 3729 I'm Telling the Truth(二分图最大匹配)
- 分布式服务框架HSF学习
- [转]搞ACM的你伤不起(转自Roba大神)
- 《Hadoop:The Definitive Guide 4th Edition》Chapter 1 Meet Hadoop