題目:此題緣於《程式設計珠璣》,乙個檔案包含最多n個正整數,每乙個都小於
n,每乙個數都不會出現兩次以上。將這個檔案排序。
珠璣上的解法:
/*phase 1: initialize set to empty*/
for i = [0, n)
bit[i] = 0
/*phase 2: insert present elements into the set*/
for each i in the input file
bit[i] = 1
/*phase 3: write sorted output*/
for i = [0,n)
if bit[i] == 1
write i on the output file
下面的原**包括下面幾個問題的解決方案:
1. 給乙個正整數陣列,按序列印出來
2. 給出乙個正整數陣列,包含1到n的所有數,某乙個數除外,
要你找出這個數。有兩種解法,一種是用跟問題1同樣的方法
用bitmap,另外一種方法是用異或的功能
3. 給出1-n的所有正整數,要求其任意乙個排列,且概率為1/n!.
關於1 n排序問題
我開始不會,多看了劉大大的數書幾遍後,領悟一點。大致的思路是 拿 1 2 3 為例 把每乙個數都做為排頭一次後面的數開始變化排列,比如 1為排頭,2 3 排列。易知 2可作為當前的排頭,後面的數依次是這樣 還沒完 這才1剛剛結束 即一層遞迴結束。後面的就重複上述步驟即可。includeusing n...
將1 n個整數按照字典序進行排序
題意 給定乙個整數n,給定乙個整數k,將1 n個整數按字典順序進行排序,返回排序後第k個元素。多組輸入,t 100,n 1e6 分析 這個題和之前做的模擬出棧的性質挺像的,不是你將1 n個數字排好序或者直接算出第k個數時誰,而是模擬題意的炒作,一步步填充,填充到第k個元素結束 可以分成兩步來做,首先...
1 n整數中1出現的次數
示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 62.1 思路分析 題目要求1 n中1出現的次數,考慮將n轉換為字串,然後統計字元1的個數,但這樣會超時 既然1不行,換一種思路,將n轉換為字串後,可以容易確定n的位數 利用for迴圈,從個位開始直到最高位,計算每一位上1出現的次數...