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