給定起點和終點之間的距離 l ,在起點和終點之間存在 n 個點,給出這 n 個點距離起點的距離,求把這n個點中去掉m個點後剩餘點之間可能的最小值的最大值(即求 n-m 個點之
間距離最小值的最大值) 。
首先知道結果必然存在於在不操作的最小值和l之間,答案範圍確定。
然後就是給定middle含義: 比最小值略小的乙個值。
用乙個for迴圈進行處理,最後得到的值blocks滿足小於等於middle的需要拿走的最小石頭數,證明略。
如果拿走的最小石頭數依然是大於middlem,即可以肯定的是當前石頭之間距離大於等於middle時,這個middle是偏大的,需要小一點,但是最小值卻很有可能是middle(middle
是小於最小值的)。
/*2015-05-15 09:19
binitray_find:
caution: middle = ( l + h)/2, cant use l = middle?
eps: l = middle,h = middle+1, middle = (middle + middle+1)/2 = middle,cause tle!
caution: the looper is (l < h) or (l <= h)?
ans: must be careful the meanning of the program!
------------------141ms--------------------------
最優 110ms
*/#include
#include
#include
using
namespace
std;
int between_of[50005
],n;
int find_two(int l,int h,int
m)
if(blocks <= m)l = middle+1;//
避免l = middle的處理,所以為了防止出現l = middle,需要從意義上進行轉換
else h = middle;//
答案可能是middle,因為從意義上來思考,middle是(最小值-1),因為是middle的時候需要將石頭去掉,因此最小肯定至少大於middle
}
returnl;}
intmain()
dis_s[n+1] =l;
sort(dis_s,dis_s+n+2
);
int min_ = 0x3f3f3f3f
;
for(int i = 1;i2;i++)
printf(
"%d\n
",find_two(min_,l,m));
}}
php 利用二分法查詢ip範圍
假如業務流程中需要驗證使用者的ip位址,隨著資料庫中儲存的授權ip不停的增加,如何快速便捷的查詢到對應的ip顯得至關緊要,本文利用ip轉為對應的整數,然後利用二分法查詢,實現業務需求 好記性不如爛筆頭 具體 示例 待驗證ip ip 58.33.179.25 業務中資料庫儲存類似的資料結構,業務目標是...
演算法 二分查詢應用 直接在結果域中進行二分查詢
leetcode題目 410.分割陣列的最大值 給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 示例 輸入 nums 7,2,5,10,8 m 2 輸出 18 解釋 一共有四種方...
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...