最小可用ID

2021-10-03 11:12:13 字數 1094 閱讀 2748

描述

在非負數(亂序)中找到最小的可分配的id(從1開始編號),資料量1000000;

輸入

第一行 陣列長度

第二行 陣列元素

輸出整數

樣例輸入

5

3 2 1 4 5 7 8 9

樣例輸出

解題思路

首先分析題幹在亂序陣列中尋找那個空缺的數

解法一:

暴力迴圈o(n^2)

static

intf

(int

arr)}}

static

intindexof

(int

arr,

int k)

return-1

;}

解法二:

建立輔助空間o(n):o(2n)

static

intf

(int arr)

}for

(int i =

0;i < help.length;i++)}

return help.length+1;

}

解法三:

排序o(lgn),依次遍歷o(n)

static

intf

(int

arr)

}}

解法四:

切一刀判斷左右是否是連續的

static

intf

(int

arr)

static

intp

(int

arr,

int begin,

int end)

else

}return begin+1;

}

最小可用id和bitmap演算法

18,4,8,9,16,1,14,7,19,3,0,5,2,11,6 比如這個列表,很明顯,最小可用id為10 最簡單的演算法也異常簡單,就是1 18每個數都進行一次遍歷,找到為止,但是效能也可想而知的非常差 我們進行第一步優化 就是將這些id,第一次遍歷後進行一次索引,然後再查詢起來就非常簡單了 ...

最小可用ID(4種方法,詳細講解)

最小可用id 在非負陣列 亂序 中找到最小的可分配的id 從1開始編號 資料量1000000 上面的陣列的最小可用id為1 這個陣列的最小可用id就為16 方法一 暴力解法 時間複雜度高o n 2 package smallid import com.sun.org.apache.xalan.int...

設計寶典之MUD 最小可用設計

一尺之錘,日取其半,萬世不竭。不管我的設計進展到 我總覺得我還在半路,所以我常常請求延遲幾個星期來完成剩下的細枝末節,反正怎麼算都會預期多至少兩星期。因為不管你怎麼做,你所處的位置離你的終極目標總差這麼一半。在 zeno s paradox 裡也有類似的表述 假如你想穿越某個森林,如果是先走一半,走...