41. First Missing Positive
2016-01-12 10:23
459 查看
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.
长度为n的数组,可连续放入正整数1~n,此题要求时间复杂度为O(n),空间复杂度为常数。
可以通过两次遍历数组来完成,第一次遍历数组,通过交换,使得数组nums[i] = i+1,nums[0]~nums[n-1]中放入1~n;第二次遍历数组,查找nums[i] != i+1,(i+1)缺失;若1~n都不缺失,则返回n+1
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.
长度为n的数组,可连续放入正整数1~n,此题要求时间复杂度为O(n),空间复杂度为常数。
可以通过两次遍历数组来完成,第一次遍历数组,通过交换,使得数组nums[i] = i+1,nums[0]~nums[n-1]中放入1~n;第二次遍历数组,查找nums[i] != i+1,(i+1)缺失;若1~n都不缺失,则返回n+1
public class Solution { public int firstMissingPositive(int[] nums) { int i = 0; int n = nums.length; //第一次遍历数组,通过交换,使得数组nums[i] = i+1,nums[0]~nums[n-1]中放入1~n //第二次遍历数组,nums[i] != i+1,(i+1)缺失;若1~n都不缺失,则返回n+1 while(i < n){ if( nums[i] >0 && nums[i] <= n && nums[i] != i+1 && nums[nums[i]-1] != nums[i]){ swap(nums,i,nums[i]-1); } else{ i++; } } for(int j = 0;j < n;j++){ if(nums[j] != j+1){ return j+1; } } return n+1; } private void swap(int[] nums,int i,int j){ int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
相关文章推荐
- 媒体播放自定义界面
- android APK更新主要代码
- ASPxGridView 用法整理
- VS2008 C# 开发WM6.1 联结SQL2008数据库
- 如何解决安卓(系统版本低) CSS3 动画问题---高性能动画
- “/wechat”应用程序中的服务器错误。
- iOS设置状态栏和导航栏
- CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE有什么关系?
- Ubuntu 配置任意版本apt-get 国内开源镜像站 source list
- EditText 自动完成文本填充
- C#6.0新特性
- Linux下配置环境变量
- windows 7sdk各个版本含义
- 深入理解java异常处理机制
- C 和 C++ 的没落
- Intellij如何设置编译后自动重新加载class文件?
- 详解Android文件存储
- Integer值比较的问题
- 语义分析和文本分析区别
- caffe 画损失曲线和准确率曲线