精華區beta CSSE 關於我們 聯絡資訊
※ 引述《mqazz1 (無法顯示)》之銘言: : given two unsorted arrays X and Y, : each contains m and n numbers, separately. : design an algorithm so that, : given a number d, : it could determine if there exists two integers i and j, : such that X[i] + Y[i] = d 這裡是 X[i] + Y[j] = d 吧? 不然 j 會沒有用到... : use less than O(m*n) running time : 我想請問這題大致上從哪方面下手會比較簡易 : 謝謝 或許可以這樣做: 不妨假設 m<=n, 我們先把 d-X[1], ..., d-X[m] 算出來, 費時 O(m), 接著我們把這 m 個數排序成一個 array A, 費時 O(m log m). 剩下的就是檢查 Y 裡面每個元素有沒有 出現在 A 裡面, 若有則回答 yes, 若完全沒有則回答 no. 現在因為 A 已經被排序過, 所以判斷 Y 裡面任何一個元素在不在 A 裡面, 都只要 O(log m) 時間即可 (用 binary search), 所以這步費時 O(n log m). 總共花的時間是 m<=n O(m) + O(m log m) + O(n log m) ====== O(m log n) + O(n log m). -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.99.236