/**
*
* Source : https://oj.leetcode.com/problems/first-missing-positive/
*
* Created by lverpeng on 2017/7/15.
*
* 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.
*
*/
public class FindFirstMissingPositive { /**
* 找到第一个确实的正整数
* 题目特点:
* 数组是一个整数数组
* 数组中的正整数中除了缺失的一个正整数,其他都是连续的,也就是说一个长度为n的数组,数组中的数是1-n(最多,因为可能有0或者负数)
*
* 可以把每一个数房放在其下标减1的位置
* 然后遍历数组,发现num[i] != num[i-1]或说明就找到了缺失的数
*
* @param num
* @return
*/
public int fistMissingPositive (int[] num) {
for (int i = 0; i < num.length;) {
if (num[i] > 0 && num[i] != num[num[i] - 1]) {
int temp = num[num[i]-1];
num[num[i]-1] = num[i];
num[i] = temp;
} else {
i ++;
}
} for (int i = 1; i < num.length; i++) {
if (num[i] != (num[i-1] + 1)) {
return num[i - 1] + 1;
} }
return -1;
} public static void main(String[] args) {
FindFirstMissingPositive findFirstMissingPositive = new FindFirstMissingPositive();
int[] arr = new int[]{1,2,0};
int[] arr1 = new int[]{3,4,-1,1};
int[] arr2 = new int[]{3,4,1,1};
int[] arr3 = new int[]{3,4,1,1};
System.out.println(findFirstMissingPositive.fistMissingPositive(arr));
System.out.println(findFirstMissingPositive.fistMissingPositive(arr1));
System.out.println(findFirstMissingPositive.fistMissingPositive(arr2));
System.out.println(findFirstMissingPositive.fistMissingPositive(arr3));
} }

最新文章

  1. swift-懒加载
  2. 用帝国CMS时遇到的问题
  3. CF570D——Tree Requests
  4. UIPickerView 循环滚动(一种假象)
  5. jboss4.2.3禁用http put/delete等请求
  6. tornado框架之路一
  7. 常用shell笔记
  8. Vue + WebApi 小项目:构造自己的在线 Markdown 笔记本应用
  9. 关于memset赋值问题
  10. YOLO 从数据集制作到训练
  11. caffe调loss方法
  12. Dubbo 在maven项目中的应用
  13. XAMPP配置基于虚拟目录、多域名的环境
  14. memcmp 和 memcpy使用
  15. phalcon分页的处理
  16. iOS- 如何将应用集成发短信、发邮件、打电话
  17. Python WebDriver 文件上传(二)
  18. Javascript深入__proto__和prototype的区别和联系
  19. Visual Studio - 安装VAX
  20. 通过SSRS创建动态分组报表的方法!

热门文章

  1. bootstrap table使用参考
  2. Redis sentinel之集群搭建
  3. Python request库与爬虫框架
  4. Fragment+Viewpaager
  5. Android开发者的Anko使用指南(一)之Intent
  6. SSH连接Linux操作:
  7. Android-Java-接口Interface
  8. python 导入模块出错 ImportError: No module named &#39;request&#39;
  9. OpenFlow学习笔记
  10. Java核心技术卷一基础知识-第14章-多线程-读书笔记