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

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

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

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乌拉特中旗| 永昌县| 凤台县| 梅州市| 阿坝县| 全州县| 田阳县| 福清市| 东乌珠穆沁旗| 榆树市| 迁西县| 米泉市| 从化市| 明水县| 庆城县| 上虞市| 栾城县| 光山县| 万全县| 扶沟县| 兴海县| 沽源县| 咸丰县| 衡阳市| 米易县| 井研县| 白河县| 页游| 隆化县| 呼玛县| 香河县| 克山县| 乐亭县| 石阡县| 清远市| 葫芦岛市| 黄龙县| 社旗县| 海城市| 保亭| 兴业县|