數(shù)組隨機(jī)取值 c#中怎樣使數(shù)組亂序?
c#中怎樣使數(shù)組亂序?生成一個(gè)介于0和8之間的隨機(jī)數(shù),并將其放入數(shù)組中(當(dāng)然,每次都要清除它)。然后判斷數(shù)字是否在數(shù)組中。如果是,生成下一個(gè)。使用while直到數(shù)據(jù)長(zhǎng)度達(dá)到9。效率肯定不高,僅供參考給
c#中怎樣使數(shù)組亂序?
生成一個(gè)介于0和8之間的隨機(jī)數(shù),并將其放入數(shù)組中(當(dāng)然,每次都要清除它)。然后判斷數(shù)字是否在數(shù)組中。如果是,生成下一個(gè)。使用while直到數(shù)據(jù)長(zhǎng)度達(dá)到9。效率肯定不高,僅供參考
給定一個(gè)亂序數(shù)組,找到其中第K大的值,要求?
所謂“第(第一)k個(gè)最大數(shù)問題”是指在長(zhǎng)度為n(n>=k)的無序數(shù)組中從大到小尋找第(第一)k個(gè)數(shù)的問題。
解決方案1:我們可以先將無序數(shù)組從大到小排序,然后取出最上面的k,總時(shí)間復(fù)雜度為O(n*logn k)。
解決方案2:使用選擇排序或交互式排序,可在選擇k次后獲得第k個(gè)最大數(shù)。總時(shí)間復(fù)雜度為O(n*k)
解決方案3:利用快速排序的思想,從數(shù)組s中隨機(jī)找到一個(gè)元素x,將數(shù)組分為SA和sb兩部分。SA中的元素大于或等于x,sb中的元素小于x。在這種情況下,有兩種情況:
1。如果SA中的元素?cái)?shù)小于k,則sb中的k-| SA |元素是第k個(gè)最大數(shù);
2。如果SA中的元素?cái)?shù)大于或等于K,則返回SA中第K個(gè)最大的元素?cái)?shù)。時(shí)間復(fù)雜度約為o(n)
解決方案4:二進(jìn)制[smin,Smax]搜索結(jié)果x,統(tǒng)計(jì)信息x出現(xiàn)在數(shù)組中,整個(gè)數(shù)組中的k-1數(shù)是第k個(gè)最大數(shù)。平均時(shí)間復(fù)雜度為O(n*logn)
解決方案5:使用O(4*n)方法為原始數(shù)量構(gòu)建最大堆,然后彈出K次。時(shí)間復(fù)雜度為O(4*n,K*logn)
解決方案6:保持最小堆大小為K。對(duì)于數(shù)組中的每個(gè)元素,判斷堆頂?shù)拇笮?。如果堆頂很大,則無所謂。否則,彈出堆頂并將當(dāng)前值插入堆中。時(shí)間復(fù)雜度O(n*logK)
解決方案7:使用哈希保存數(shù)組中元素Si的出現(xiàn)次數(shù),利用計(jì)數(shù)和排序的思想,在由大到小的線性掃描過程中,前面有k-1的數(shù)字是第k個(gè)最大的數(shù)字,平均時(shí)間復(fù)雜度O(n)