posts - 27,  comments - 3,  trackbacks - 0
          一個(gè)整數(shù)數(shù)列,元素取值可能是1~N(N是一個(gè)較大的正整數(shù))中的任意一個(gè)數(shù),相同數(shù)值不會(huì)重復(fù)出現(xiàn)。設(shè)計(jì)一個(gè)算法,找出數(shù)列中符合條件的數(shù)對(duì)的個(gè)數(shù),滿足數(shù)對(duì)中兩數(shù)的和等于N+1。 復(fù)雜度最好是O(n),如果是O(n2)則不得分。

          網(wǎng)上大多數(shù)人的做法時(shí)間復(fù)雜度雖然能達(dá)到 O(n), 但是空間復(fù)雜度是O(N) ,題目已經(jīng)指出N是一個(gè)較大的整數(shù),所以可能不大好。
          想了一下,想了一個(gè)空間復(fù)雜度是O(m)的算法 ,其中m是輸入整數(shù)數(shù)列的長度。設(shè)輸入的整數(shù)數(shù)組是array,符合條件的數(shù)對(duì)的個(gè)數(shù)為count,初始化為0
          1. 建立hash集合S, 遍歷array的前一半元素,對(duì)于這一半元素中的任意一個(gè)元素e, 在S中插入 N+1 - e
          2. 遍歷array的后一半元素,對(duì)于每一個(gè)元素e, 如果e在S中已經(jīng)存在,則count +1
          3. 遍歷結(jié)束,返回count即可

          這個(gè)算法只需遍歷一遍輸入數(shù)組,復(fù)雜度為O(n) ,只需存儲(chǔ)m/2個(gè)元素,復(fù)雜度為O(m) ,如果m遠(yuǎn)小于N,這個(gè)算法還是有很大改進(jìn)的。
          posted on 2011-05-19 18:48 Jeff Lee 閱讀(216) 評(píng)論(0)  編輯  收藏 所屬分類: algorithm

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2011年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 酒泉市| 雅安市| 微山县| 迁西县| 磴口县| 钟祥市| 玛沁县| 特克斯县| 宣汉县| 达州市| 民乐县| 盐池县| 错那县| 平安县| 黄陵县| 广水市| 如东县| 文化| 简阳市| 石狮市| 马鞍山市| 响水县| 玛多县| 安庆市| 碌曲县| 孝昌县| 呼和浩特市| 梨树县| 临沧市| 葫芦岛市| 峨眉山市| 东至县| 平安县| 武夷山市| 泸水县| 延安市| 耿马| 永清县| 台安县| 友谊县| 双辽市|