源地址
https://app.codility.com/programmers/lessons/3-time_complexity/perm_missing_elem/
PermMissingElem(缺失的元素)
給定一個包含N個不同整數的數組A,數組包含範圍在[1…(N + 1)]範圍內的整數,也就是說有一個元素缺失了。
你的目標是找到這個缺失的元素。
寫一個函數
class Solution {
public int solution(int[] A);
}
給定一個數組A,返回這個缺失的元素的值。
比如,給定如下數組A
A[0] = 2
A[1] = 3
A[2] = 1
A[3] = 5
函數返回4。
假定:
- N是範圍在 [0…100,000]之間的整數
- A中的所有元素都是唯一的
- A中的每一個元素都是在範圍[1…(N + 1)]之內的整數
第一步
講數組排序,然後遍歷,如果 i+1 ≠ ai,那麼缺失的就是 i+1。
public int solution(int[] A) {
int len = A.length;
if (len == 0) {
return 1;
}
Arrays.parallelSort(A);
for (int i = 0; i < len; i++) {
if (A[i] != i + 1) {
return i + 1;
}
}
return len + 1;
}
第二步
因爲只缺失了一個,所以可以先吧A中的元素都放到另一個長度爲N+1的數組中,然後新數組中爲空的那個位置,即爲缺失的元素。
public int solution(int[] A) {
int len = A.length;
int[] resultArr = new int[len + 1];
for (int a : A) {
resultArr[a - 1] = a;
}
for (int i = 0; i < resultArr.length; i++) {
if (resultArr[i] == 0) {
return i + 1;
}
}
return 1;
}