標籤:class code java http tar com
Given an unsorted integer array, find the first missing positive integer.
For example,
Given[1,2,0]return3,
and[3,4,-1,1]return2.
Your algorithm should run in O(n) time and uses constant space.
https://oj.leetcode.com/problems/first-missing-positive/
思路:交換數組元素,使得數組中第i位存放數值(i+1)。最後遍曆數組,尋找第一個不符合此要求的元素,返回其下標。整個過程需要遍曆兩次數組,複雜度為O(n)。
public class Solution {public int firstMissingPositive(int[] A) {if (A == null && A.length == 0)return 1;int n = A.length;int i;for (i = 0; i < n; i++) {while (A[i] > 0 && A[i] != i + 1 && A[i] <= n&& A[i] != A[A[i] - 1]) {swap(A, i, A[i] - 1);}}for (i = 0; i < n; i++)if (A[i] != i + 1)return i + 1;return n + 1;}private void swap(int[] a, int i, int j) {int tmp = a[i];a[i] = a[j];a[j] = tmp;}public static void main(String[] args) { System.out.println(new Solution().firstMissingPositive(new int[] { 1, 2, 0 })); System.out.println(new Solution().firstMissingPositive(new int[] { 3, 4, -1, 1 })); System.out .println(new Solution().firstMissingPositive(new int[] { 0 })); System.out .println(new Solution().firstMissingPositive(new int[] { 1 })); System.out .println(new Solution().firstMissingPositive(new int[] { 2 })); System.out.println(new Solution() .firstMissingPositive(new int[] { 0, 1 }));System.out.println(new Solution().firstMissingPositive(new int[] { 1, 1 }));}}