陣列中是否有兩個數的和為10

2021-05-23 05:20:03 字數 699 閱讀 3509

給定乙個陣列,問其中是否有兩個數的和為10?

原文的思路:

1.比較任意兩個數的和是否為10。如

for (int i = 0; i < n; ++i) }

複雜度為o(n*n)。 

2.將陣列排序後,對每個數m,使用二分查詢在陣列中尋找10-m。

複雜度為o(nlogn)。 

3.將陣列儲存到hash_set中去,對每個數m,在hash_set中尋找10-m。

複雜度為o(n)。 

4.如果陣列很大,超過記憶體的容量,可以按照hash(max(m, 10-m))%g,將資料分到g個小的group中。然後對每個小的group進行單獨處理。

複雜度為o(n)。

其實也可以先對陣列排序,時間複雜度為o(nlgn),然後設兩個指標指向陣列兩端,如果兩個指標對應元素之和為10,那麼返回true,如果小於10,那麼首指標遞增,否則尾指標遞減,直到兩個指標相遇時,如果還是沒有和為10的元素對出現,那麼返回false。

自己的思路:

申請乙個11個元素大小的輔助陣列, 然後對原陣列進行遍歷, 對於每個元素i,  如果i <= 10, 則將i存放到輔助陣列的第i個位置, 這樣遍歷完原陣列, 在在輔助陣列中查詢是否有兩個數和為10, 兩個指標, 乙個指向頭, 乙個指向尾, 如果這兩個指標指向的元素都存在, 則原陣列中存在兩個數加和為10...

時間複雜度o(n), 空間複雜度o(1)...

判斷兩個陣列中是否有相同的元素 C語言

判斷兩個陣列中是否有相同的元素 方法一 用第乙個陣列的第乙個元素遍歷第二個陣列的每乙個元素,然後依次用第乙個陣列的第二個第三個等等元素遍歷陣列二的每乙個元素。include int main int arr2 int len1 sizeof arr1 sizeof arr1 0 int len2 s...

判斷兩個陣列是否 相等

判斷前後 兩次 獲得的位置是否相同,是不是同一位置。1.如果相同,返回return 不執行 下面的 操作 2.如果有 不同,哪怕只有乙個,break,執行下面的操作 m uileftarray 上一次的位置 uileftarray 獲得的新的位置 原程式 寫的妙 啊 if m ucfirenum u...

判斷兩個陣列是否相等

陣列屬於引用資料型別,其值儲存在堆中,因此我們無法簡單的用 對其進行判斷,但可以使用類似於深拷貝的方法將其像剝洋蔥一樣撥開,逐個判斷 下面是本人自己寫的一套演算法 function arrayequal arr1,arr2 function ifequal obj1,obj2 var pretype...