样例 如果给出 [1,2,0], return 3
如果给出 [3,4,-1,1], return 2 这题目是在刷Leetcoder上看到的,第一时间看到后没有思路,去网上找了找,发现有很多方法。但是其他大牛用的算法很多看不懂,有些大牛给出了好多的算法来解决,并且分别衡量出每种算法的时间复杂度和空间复杂度。 这里暂且不深究什么事时间复杂度和空间复杂度,就以我目前所掌握的知识,自己用代码实现了。下面是代码: - public class Solution {
- /**
- *
- *
- */
- public int firstMissingPositive(int[] A) {
- // 代码如下
- if (A == null) {
- return 1;
- }
-
- for (int i = 0; i < A.length; i++) {
- while (A > 0 && A <= A.length && A != (i+1)) {
- int tmp = A[A-1];
- if (tmp == A) {
- break;
- }
- A[A-1] = A;
- A = tmp;
- }
- }
-
- for (int i = 0; i < A.length; i ++) {
- if (A != i + 1) {
- return i + 1;
- }
- }
-
- return A.length + 1;
-
- }
- }
- public static void main(String [] args){
- int [] arr = {1,2,4,5,8,9,7,};
- firstMissingPositive(arr)
|