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 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...