LeetCode--041--缺失的第一个整数(java)
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
说明:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。
思路:
case1:length == 0 return 1
case2:length == 1 case2.1 [-1] [-....] [0] [2] [...] return 1
case2.2 [1] return 2
case3: length >1 跳过负数 case3.1 (nums[i] - nums[i-1] > 1) && (nums[i] > 1) [-1,2,3] or [-1,3,100] return 1
case3.2 (nums[i] - nums[i-1] > 1) && (nums[i] - nums[i-1] < nums[i]) [-1,1,3] return nums[i-1] + 1
case4: length > 1 i走到了最后一个 [1,2,3] return nums[nums.length -1 ] + 1
case5:length > 1 全为负数 return 1
class Solution {
public int firstMissingPositive(int[] nums) {
if(nums.length == 0 || nums == null) return 1;
Arrays.sort(nums);
if(nums.length == 1){
if(nums[0] < 1 || nums[0] > 1){//[-1] [2]
return 1;
}else{
return 2;//[1]
}
}
if(nums[0] > 1) return 1;
for(int i = 1;i < nums.length;i++){
if(nums[i] < 0)continue;
if(nums[i] - nums[i-1] > 1 && nums[i] - nums[i-1] < nums[i]){//跳过[-1,2,3]
return nums[i - 1] + 1;
}else if(nums[i] - nums[i-1] > 1 && nums[i] > 1) return 1;//[-1,2,3]
if(i == nums.length - 1){
return nums[i] + 1;
}
}
return 1;
}
}
2019-05-01 21:11:23
最新文章
- 简单C语言文法
- arguments.callee 调用自身 caller,callee,apply and call
- RadioButton Control
- 10 Common Problems Causing Group Policy To Not Apply
- 四项技术 助你提高SQL Server的性能
- 在Silverlight中实施RESTful调用
- 翻译:如何编译 Gunz 源代码
- 用JS写的无缝滚动特效
- 与IO相关的等待事件troubleshooting-系列9
- (转载)ADOQuery参数传递
- Windows 2003 VPN配置步骤[转]
- Ken Norton和软件工程师打交道的10个秘诀
- FP-Growth算法之频繁项集的挖掘(python)
- 常用WebService收集
- Kettle 4.4.2源码分析
- MQ NameServer模块划分
- linux(ubuntu)环境下安装IDEA
- ThreadLocal(线程绑定)
- Python中的for...else...搭配
- 通过 MySQL 存储原理来分析排序和锁(转)
热门文章
- sshd使用
- 词频分析 评论标签 nltp APP-分析买家评论的评分-高频词:二维关系
- adbl连接不上 daemon not running. starting it now on port 5037 ADB server didn&#39;t ACK
- 类LinkedHashSet
- Jenkins持续集成_04_解决HTML测试报告样式丢失问题
- 【Unity Shader】---基础光照
- Bootstrap 学习笔记 项目实战 响应式导航栏
- sql中unique和distinct
- oracle--高级使用(merge)(递归START WITH)分析函数over
- 000 (H5*) 知识点总结