1. 程式人生 > 其它 >面試必考真題-演算法篇:給定一個無序陣列arr,找到陣列中未出現的最小正整數。

面試必考真題-演算法篇:給定一個無序陣列arr,找到陣列中未出現的最小正整數。

技術標籤:面試必考真題-演算法演算法資料結構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; } }

參考https://www.nowcoder.com/practice/8cc4f31432724b1f88201f7b721aa391?tpId=190&&tqId=35388&rp=1&ru=/ta/job-code-high-rd&qru=/ta/job-code-high-rd/question-ranking