上篇談到了用異或來解決,確實是個好方法,時間復雜度為o(n),比例一遍ok,空間復雜度為o(1),只占用一個空間足矣。現在把這個問題升級下: (1)給出n個數,其中有且僅有一個出現了奇數次,其余的都出現了偶數次。用線性時間常數空間找出這個出現奇數次的數 (2)給定n個數,其中有且僅有兩個出現 ...
問題定義:有 n 個數,只有一個單着,別的都是成對的,找出這個單着的數。比如: 。 是答案。 思路一:暴力搜索 每個數都和其他數比較,找不到相同的,就得到了結果。時間復雜度為o n 思路二:排序搜索 先給序列排個序,之后從前往后一對一對的找,直到不是成對的為止。時間復雜度,怎么也得o nlgn 思路三:異或計算,一趟搞定。時間復雜度o n 直接看思路三:原理:異或操作 對於位操作 相同為 ,相異為 ...
2013-04-03 22:42 13 2320 推薦指數:
上篇談到了用異或來解決,確實是個好方法,時間復雜度為o(n),比例一遍ok,空間復雜度為o(1),只占用一個空間足矣。現在把這個問題升級下: (1)給出n個數,其中有且僅有一個出現了奇數次,其余的都出現了偶數次。用線性時間常數空間找出這個出現奇數次的數 (2)給定n個數,其中有且僅有兩個出現 ...
從0,1,2,...,n這n+1個數中選擇n個數,找出這n個數中缺失的那個數,要求O(n)盡可能小。 題目描述 從0,1,2,...,n這n+1個數中選擇n個數,找出這n個數中缺失的那個數,要求O(n)盡可能小。 示例1 輸入 復制 [0,1,2,3,4,5,7] 返回值 復制 6 ...
遇到題目為從n個無序數組中找出第K大的數,最開始想到的就是冒泡排序、選擇排序等,每次找到一個最大(或最小)的,但是很明顯需要時間復雜度為O(n*k)!具體代碼細節參考findK_2 改進一點的算法有根據快速排序的思想,時間復雜度達到O(n)。想象一下,第k大,說明前面有k-1 ...
有N個數的數組,沒有順序。現在的問題是讓你在數組中找出兩個數,使得這兩個數的和盡可能的接近0。 想到的的方法是嘗試所有數對<xi,xj>的組合,之后找出其中和的絕對值最小的數對即可。但是這樣做的時間復雜度是O(N^2),有沒有更快一點的方法呢? 這里給出一個O(NlogN ...
思路:如果限制空間復雜度為O(1),我們就無法采用哈希表的方法去求解。題目中數組中所以數字都在范圍[0, N-1],因此哈希表的大小為N即可。因此我們實際要做的就是對N個范圍為0到N-1的數進行哈希,而哈希表的大小剛好為N。對排序算法比較熟悉的同學不難發現這與一種經典的排序算法——基數排序非常類似 ...
給定一個數組S,試找出3個數a, b, c,使得a+b+c=0。也即從集合中找出所有的和為0的3個數。 例如:集合S={-1,0, 1, 2, -1, 4},則滿足條件的3個數有2對: (-1, 0, 1)和(-1, 2, -1)。注意(-1,1,0)與(-1,0,1)算同一個解 ...
從10000個整數中找出最大的10個,最好的算法是什么? 算法一:冒泡排序法 千里之行,始於足下。我們先不說最好,甚至不說好。我們只問,如何“從10000個整數中找出最大的10個”?我最先想到的是用冒泡排序的辦法:我們從頭到尾走10趟,自然會把最大的10個數找到。方法簡單,就不再這里寫 ...
思路分析: 可以只通過一遍掃描數組即可找出數組中第二大的數,即通過設置兩個變量來進行判斷。首先定義一個最大變量來存儲數組的最大值,初始值為數組首元素;另一個是第二大變量,用來存儲數組中的第二大數,因其一定不能超過數組中的最大值,所以初始值可設為最小負整數-32767,然后遍歷數組元素。如果數組 ...