最小可用id和bitmap演算法

2021-06-29 03:55:39 字數 611 閱讀 9990

[18, 4, 8, 9, 16, 1, 14, 7, 19, 3, 0, 5, 2, 11, 6]

比如這個列表,很明顯,最小可用id為10

最簡單的演算法也異常簡單,就是1-18每個數都進行一次遍歷,找到為止,但是效能也可想而知的非常差

我們進行第一步優化

就是將這些id,第一次遍歷後進行一次索引,然後再查詢起來就非常簡單了

下面再進行一次,儲存方面的優化,如果我們用位儲存來做是否有這個數字的標記,就可以節省大量的空間

#define n 1000000 // 1 million

#define word_length sizeof ( int ) * 8

void setbit (unsigned int* bits , unsigned int i )

int testbit (unsigned int* bits , unsigned int i )

unsigned int bits [n/word_length+1];

int min_free(int *xs, int n)

{ int i , len = n/word_length+1;//確定初始化bit陣列長度

for(i=0; i

最小可用ID

描述 在非負數 亂序 中找到最小的可分配的id 從1開始編號 資料量1000000 輸入 第一行 陣列長度 第二行 陣列元素 輸出整數 樣例輸入 5 3 2 1 4 5 7 8 9 樣例輸出 解題思路 首先分析題幹在亂序陣列中尋找那個空缺的數 解法一 暴力迴圈o n 2 static intf in...

最小可用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 裡也有類似的表述 假如你想穿越某個森林,如果是先走一半,走...