sort和binary search的妙用

2021-09-24 18:05:09 字數 1125 閱讀 6847

給定 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 的複雜...