碰到這種類似題目可以根據條件不同寫出不同時間複雜度的**:
1.最暴力的遍歷,時間複雜度為o(n^2)
2.一般情況下先排序,再從兩邊向中間搜尋結果,時間複雜度為o(nlogn + n)
int i = 0, j = numbers.size() - 1;
while (i < j)
3.如果陣列所有數都是唯一的,可以用unordered_map,時間複雜度為o(n),空間複雜度為o(n)
本題採用的是第三種方法accept,**如下:
#include #include #include using namespace std;
class solution
nummap[numbers[i]] = i + 1;
} return result;
}};int main()
return 0;
}
交換兩個陣列的值,使其和的差值最小
求解思路 當前陣列 a和陣列 b的和之差為 a sum a sum b a的第 i個元素和b的第 j個元素交換後,a和 b的和之差為 a sum a a i b j sum b b j a i sum a sum b 2 a i b j a 2 a i b j 設x a i b j a a a a ...
乙個無序陣列中兩個數之和等於給定的值sum
問題描述 給定乙個陣列,求兩個數之和 給定值sum的所有組合個數。變形 兩個數之和 sum的任意一組數 方法一 窮舉法 從陣列中任意找兩個數,看其和是否 sum。時間複雜度o n 2 方法二 先排序,然後定義兩個指標,乙個i 0指向陣列頭,乙個j len 1指向陣列的尾,看其和是否 sum 若 則查...
求無序陣列排序後相鄰兩個數的最大差值
缺點 當陣列中元素懸殊很大時,如1 2 100000000,則需要構造乙個長度是100000000的新陣列array,則該方法不可取。假設原陣列長度為n 最大差值肯定出現在空桶附近。非空桶內部最大差值d 空間複雜度 o n 時間複雜度 o n 總共掃瞄3次 int maxgap std vector...