二分 利用結果範圍進行查詢

2022-05-30 14:36:12 字數 1414 閱讀 6008

給定起點和終點之間的距離 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小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...