給定 n
nn 個數 a
1a_1
a1、a
2a_2
a2 … a
na_n
an,要求判斷這組數里是否存在某兩個數(可以重複選取同乙個數)的和為 sum
sumsu
m。1 ≤n
≤100000
1 \le n \le 100000
1≤n≤10
0000
1 ≤a
i≤
10000
1 \le a_i \le 10000
1≤ai≤
100001≤
sum≤
1000000000
1 \le sum \le 1000000000
1≤sum≤
1000
0000
00
2 3 4 5
yes
很簡單的乙個思路是列舉出所有的情況,一一和 sum 比較,但是這樣演算法的複雜度是 o(n
2)
o(n^2)
o(n2
),無法完成需求,所以必須簡化演算法。
想一下:a+b
=sum
a + b = sum
a+b=su
m 可以轉化為 a=s
um−b
a = sum - b
a=sum−
b,所以我們可以利用二分查詢來簡化演算法,**如下:
#include
#include
using namespace std;
const int num
=1e5+50
;int a[
num]
;int n;
int sum;
void
solve()
} cout <<
"no"
<< endl;
}int main
(int argc, char** ar**)
cin >> sum;
solve()
;return0;
}
python的列表排序sort和sorted
list排序可以使用python內建的sorted 函式或list自帶的sort 函式。區別 sorted 不修改原list而是建立個新list,list.sort 直接修改原list l 3 4,2 5,7 1 l new sorted l print l new,l 原list未修改 1 2,3...
qsort和sort的區別
first qsort 基本快速排序的方法,每次把陣列分成兩分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本排序的效率較低。整合在 c語言庫函式裡面的的 qsort 函式,使用 三路劃分的方法解決這個問題。所謂三路劃分,是指把陣列劃分成小於劃分值,等於劃分值和大於劃分值的三個部分。函式對bu...
sort和qsort的區別
std sort使用的演算法在大多數情況下都比quick sort演算法要快,並且,在quick sort越慢的情況下越明顯。quick sort 平均情況下為o nlogn 在最壞情況下為 o n 2 而std sort是針對quick sort最壞情況做的改進,從而保持了 o nlogn 的複雜...