给定一个未排序的整数数组,找出其中没有出现的最小的正整数。

示例 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

最新文章

  1. 简单C语言文法
  2. arguments.callee 调用自身 caller,callee,apply and call
  3. RadioButton Control
  4. 10 Common Problems Causing Group Policy To Not Apply
  5. 四项技术 助你提高SQL Server的性能
  6. 在Silverlight中实施RESTful调用
  7. 翻译:如何编译 Gunz 源代码
  8. 用JS写的无缝滚动特效
  9. 与IO相关的等待事件troubleshooting-系列9
  10. (转载)ADOQuery参数传递
  11. Windows 2003 VPN配置步骤[转]
  12. Ken Norton和软件工程师打交道的10个秘诀
  13. FP-Growth算法之频繁项集的挖掘(python)
  14. 常用WebService收集
  15. Kettle 4.4.2源码分析
  16. MQ NameServer模块划分
  17. linux(ubuntu)环境下安装IDEA
  18. ThreadLocal(线程绑定)
  19. Python中的for...else...搭配
  20. 通过 MySQL 存储原理来分析排序和锁(转)

热门文章

  1. sshd使用
  2. 词频分析 评论标签 nltp APP-分析买家评论的评分-高频词:二维关系
  3. adbl连接不上 daemon not running. starting it now on port 5037 ADB server didn&#39;t ACK
  4. 类LinkedHashSet
  5. Jenkins持续集成_04_解决HTML测试报告样式丢失问题
  6. 【Unity Shader】---基础光照
  7. Bootstrap 学习笔记 项目实战 响应式导航栏
  8. sql中unique和distinct
  9. oracle--高级使用(merge)(递归START WITH)分析函数over
  10. 000 (H5*) 知识点总结