二分法基本思想
在用二分法进行查找时,查找对象的数组必须是有序的。其基本思想是先确定待查数据的范围(如用 [left,right] 区间表示),然后逐步缩小范围直到找到或找不到目标数据为止。
具体做法是:先取数组中间位置(mid=(left+right)/2)的数据元素与给定值比较。若相等,则查找成功;若给定值比该数据元素的值小(或大),则给定值必在数组的前半部分[left,mid-1](或后半部分[mid+1,right]),然后在新的查找范围内进行同样的查找。如此反复进行,直到找到数组元素值与给定值相等的元素或确定数组中没有待查找的数据为止。
二分查找每查找一次,或成功,或使查找数组中元素的个数减少一半。因此二分法查找是一种非常高效的搜索方法。其时间复杂度是O(log2n),一般用于对普通搜索方法的优化。
二分法的适用情况一般满足以下几点:(1)数组数据大,需要对处理的时间复杂度进行优化;(2)该数组已经排序;(3)一般要求找到的是某一个值或一个位置。
最小化最大值问题
最小化最大值问题在优化问题中比较常见。简单来说,“最小化最大值”是为了压制优化目标中表现最突出的成分。
在某些情况下,要求最大值的最小化才有意义。例如,在城市规划中需要确定急救中心、消防中心的位置等。
例题
给定的一个长度为N的正整数数组,现要将其截成M(M≤N)段,要求每段数组和的最大值最小。例如 输入:([4,2,4,5,1], 3) 输出