求N 1 個數字中缺少的那個數值

2021-06-10 07:07:53 字數 363 閱讀 6616

給一串整數 0,1,2,...,n,其中乙個整數缺失。也就是說,如果是排序好放到大小為n的陣列中,其實最大的整數應該是n+1。你的任務和演算法是找出其中缺失的整數。如果是排序好的,怎麼做?如果是無序的,又該如何做?時間複雜度各是什麼?你能想到的最優演算法是什麼?動手寫下你的**吧。 

其實不用排序,把每個數字都加起來sum1=1+……+n,然後再計算一下如果乙個都不缺的總和,sum2=n(n+1)/2,兩個總合相減sum2-sum1,就得到了缺少的數字,由於可能數字過大產生溢位,可以分段相加,例如步長為65535,然後大於65535的都減去這個數值再加到一起。無論是否有序都可以。

如果有序 的話,其實採用二分查詢的方法是最最快的,代價為o(log(n)),而相加的方法則是o(n)

求1 n中1的個數

輸入乙個整數,求1 n這n個數的十進位制表示1的個數。將n的十進位制的每一位單獨拿出討論,每一位的值記為weight。1 個位 假若n 534。534的個位從0 9變化了53次,這53我們記為round。因為weight為4 0。因此第54輪為0 4,因此1出現了count round 1。若wei...

求乙個數中1的個數

碰到遇到乙個有趣的題,求乙個數二進位制的表示中1的個數,該題有兩種解法,一種是使用短除法將該數直接轉化為二進位制數,另一種比較巧妙的演算法是使用與運算,原理如下圖所示 依照此種思入有如下演算法 int numberof1 solution3 int i return count 依照短處法的思路 有...

找出2n 1個數中不成對的那個

問題定義 有2n 1個數,只有乙個單著,別的都是成對的,找出這個單著的數。比如 2 1 3 2 1。3是答案。思路一 暴力搜尋 每個數都和其他數比較,找不到相同的,就得到了結果。時間複雜度為o n2 思路二 排序搜尋 先給序列排個序,之後從前往後一對一對的找,直到不是成對的為止。時間複雜度,怎麼也得...