二分查詢 T

2021-10-01 21:34:46 字數 2478 閱讀 1328

l左

r右查詢條件:while( l<=r )

#include

#include

#include

using

namespace std;

intsearch

(int a,

int n,

int p)

;int

lowerbound

(int a,

int n,

int p)

;int

main()

//給定陣列 找其中的某個元素

intsearch

(int a,

int n,

int p)

return-1

;}//尋找從小到大int陣列裡 比給定整數p小的,下標最大的元素

intlowerbound

(int a,

int n,

int p)

else

}return lastpos;}/*

注意:1:有序

2.防止(l+r)/2 l+r溢位 採用l+(r-l)/2

*/

#include

#include

#include

using

namespace std;

doublef(

double x)

double eps =

1e-6

;int

main()

cout << root << endl;

return0;

}

輸入n (n<=100,000)找出其中兩個數,使得他們之和等於m(假設肯定有解)

資料大:優化演算法

解法1:

窮舉:o(n^2)100億

一般 :(oj)

一億:危險

幾百萬:沒問題

解法2:

步驟1.排序:好的辦法,快速排序:nlog n

2.查詢 對每乙個元素a[i] 再從陣列中二分查詢m-a[i] 看能否找到 o(logn)

整個查詢複雜度:n-2logn

#include

#include

#include

using

namespace std;

intsearch

(int a,

int l,

int n,

int p)

;int

main()

return0;

}int

search

(int a,

int l,

int n,

int p)

return-1

;}

解法3:1.陣列排序 n*logn

首先要注意自己犯過的錯:不是多組輸入

看好題目!

其次 多次提交報錯,要學會看報錯資訊!

sqrt函式 是double sqrt(double)

#include

#include

#include

#include

using

namespace std;

#define m 505

//#define f(x) x*(x+1)/2

intmain()

else

if(a+b>n)

else}if

(flag)

break;}

if(flag) cout <<

"yes"

<< endl;

else cout <<

"no"

<< endl;

return0;

}/*之前自己從來沒有意識到的錯誤!!

double sqrt(double)!!!

*/

二分貪心 T

題目 有1 1,2 2,3 3,4 4,5 5,6 6大小的盒子,要把它們裝到6 6的盒子裡,它們的高度都是相同的,用最少的6 6盒子把所有尺寸的盒子都裝起來。解題思路 6 6,5 5以及4 4尺寸的物品每個物品需要占有乙個箱子,3 3的物品乙個箱子可以放4個,2 2的物品箱子可以放9個,1 1的可...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...