7. 第一个缺失正数

7. 第一个缺失正数

XMOJ 7. 第一个缺失正数


题目:7. 第一个缺失正数

描述:

给出一个无序的数列,找出其中缺失的第一个正数,要求复杂度为 O(n) 如:[1,2,0],第一个缺失为3。 如:[3,4,-1,1],第一个缺失为2。

输入:

1,2,0

输出:

true

输入样例:

1,2,0
3,4,-1,1
-1,-3,-5
1,2,3
-1,-10,0

输出样例:

3
2
1
4
1

方法:模拟

思路:用一个数组arr记录每一个输入正整数,遍历输入数据,输入数据中有正整数i则arr[i] = 1,否则arr[i] = 0。再通过从arr[1]顺序遍历arr,找到第一个arr[i] != 1 的情况,i则为第一个缺失正数。

运行数据:最大执行时间:85.22 ms,最大内存开销:17340 KiB

复杂度分析:

由于输入数据组数无法确定,时间复杂度和空间复杂度只考虑一组数据。

  • 时间复杂度:O(n),n为输入数据的长度。
  • 空间复杂度:O(n),n为输入数据的长度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Scanner;

public class Main {

public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String line;
while (scan.hasNextLine()) {
line = scan.nextLine().trim();
if (line.equals("")) {
System.out.println(1);
break;
}
String[] strs = line.split(",");
int[] arr = new int[strs.length + 2];
for (int i = 0; i < strs.length; i++) {
int index = Integer.valueOf(strs[i]);
if (index > 0) {
arr[index] = 1;
}
}
for (int i = 1; i < arr.length; i++) {
if (arr[i] != 1) {
System.out.println(i);
break;
}
}
}
}
}

学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。

才疏学浅,若有错误或不当之处,可批评指正,还请见谅!


 
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×