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 閱讀(216) 評論(0)  編輯  收藏 所屬分類: algorithm

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 油尖旺区| 海原县| 卓资县| 阿勒泰市| 赤峰市| 阜新| 澎湖县| 横山县| 临澧县| 临沧市| 龙山县| 丽江市| 嘉荫县| 冷水江市| 玉环县| 景泰县| 调兵山市| 长寿区| 水富县| 蓝田县| 子长县| 阿勒泰市| 阿图什市| 晋州市| 天气| 施甸县| 新津县| 惠东县| 磐石市| 苗栗市| 连平县| 江源县| 重庆市| 上饶市| 凤山市| 临泉县| 蓬莱市| 莱州市| 申扎县| 澳门| 石渠县|