描述
在非負數(亂序)中找到最小的可分配的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 裡也有類似的表述 假如你想穿越某個森林,如果是先走一半,走...