巧妙的二分查詢

2021-10-11 20:16:01 字數 1034 閱讀 1640

用了很巧妙的二分法。

題目抽象一下就是,給定乙個陣列,將其劃分成m份,是的每份元素之和最大值最小,每份可以任意減去其中乙個元素。

那麼思路就是,要找到乙個數,這個數是各個子陣列的和的最大值,同時因為題目的要求,我們要從每個子陣列中刪去最大的之後的和比這個數小就可以。

我們用二分的方法來找這個數,一開始左邊界為陣列中最小的,有邊界為所有數字的和,那麼mid就是我們用來限制每個子陣列中的最大值,如果不能將所有數字都分割到m個子陣列裡,說明這個限制值不夠大,那麼我們就需要讓left=mid+1,如果因為限制值比較大,沒有分割到m個就分割完了,那說明太大了,我們要縮小,則right=mid;

class solution 

while

(lreturn l;

} bool check

(vector<

int>

&a,int mid,

int m)

}return true;

}}

用二分法去找到限制陣列和最大的值。

與上題類似基本一樣,這個不用去掉最大值。**基本相同。

class solution 

while

(l} bool check

(vector<

int>

&a,int mid,

int m)

else

sum+

=s;}

return cnt<=m;

}}

照抄上一題

class solution 

while

(lreturn l;

} bool check

(vector<

int>

&weights,

int mid,

int d)

else

sum+

=t;}

return cnt<=d;}}

;

迭代二分查詢二分查詢

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

二分查詢的平均查詢長度 二分查詢

資料的查詢在計算機的操作中非常常見,那麼我們應該怎樣在計算機中實現查詢操作呢?最簡單的一種方法 傻找 也就是乙個乙個的找,我們把陣列中的每個元素都和我們想要查詢的目標元素進行比對,看一下列表中是否有和這個元素相同的元素,如果我們想要尋找的那個目標元素在列表 現了,那麼就宣告查詢成功,這種演算法寫成 ...

二分查詢和遞迴的二分查詢

在乙個有序的陣列中查詢給定的資料項,把陣列衝中間分成兩半,然後看要查詢的資料項在陣列的哪一半,再次折半查詢。如下 public int find long searchkey else if lowerbound upperbound else private int recfind long se...