用了很巧妙的二分法。
題目抽象一下就是,給定乙個陣列,將其劃分成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...