面試必考真題-演算法篇:給定一個無序陣列arr,找到陣列中未出現的最小正整數。
阿新 • • 發佈:2020-12-19
技術標籤:面試必考真題-演算法演算法資料結構javaleetcode動態規劃
面試必考真題-演算法篇 牛客網
陣列
題目描述
給定一個無序陣列arr,找到陣列中未出現的最小正整數
例如arr = [-1, 2, 3, 4]。返回1
arr = [1, 2, 3, 4]。返回5
[要求]
時間複雜度為O(n),空間複雜度為O(1)
題目分析
原地雜湊,把陣列中取值在1到n的數放到對應的位置,比如1放到0的位置,2放到1的位置,……n放到n-1的位置,然後遍歷重置後的陣列,若i下標位置不是i+1,則i+1就是那個最小的正整數,若1到n位置都對的上,說明最小的正整數是n+1。
下面是Java程式碼
import java.util.*;
public class Solution {
/**
* return the min number
* @param arr int整型一維陣列 the array
* @return int整型
*/
public int minNumberdisappered (int[] arr) {
// write code here
int n = arr.length;
for(int i = 0 ; i < n ; i++){
while (arr[i]>=1 && arr[i]<=n && arr[arr[i]-1]!=arr[i]){
swap(arr,arr[i]-1,i);
}
}
for(int i = 0 ; i<n; i++){
if(arr[i] !=i+1){
return i+1;
}
}
return n+1;
}
private void swap(int[] arr,int i,int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}