为什么这个二元搜索函数的下限是最大值而不是min?

时间:2018-04-11 15:07:41

标签: python python-3.x

以下代码是较大二进制搜索问题的二进制搜索功能。

我的理解是下限应该是排序数组中的最小值,上限应该是最高索引(或最大值)。为什么在这种情况下使用max()sum()

def binarySearch(A, max_block_cnt, M):
    lower_bound = max(A)
    upper_bound = sum(A)

    if max_block_cnt == 1:      return upper_bound
    if max_block_cnt >= len(A): return lower_bound

    while lower_bound <= upper_bound:
        candidate_mid = (lower_bound + upper_bound) // 2
        if blockSizeIsValid(A, max_block_cnt, candidate_mid):
            upper_bound = candidate_mid - 1
        else:
            lower_bound = candidate_mid + 1

    return lower_bound  

此问题是MinMaxDivision问题。如果需要更多细节,请告诉我。

编辑 - 显示需要更多信息。这是我正在研究的问题:

  

给定整数K,M和非空   零索引数组A由N个整数组成。每个元素   数组不大于M.

     

您应该将此数组划分为K个连续元素块。   块的大小是0到N之间的任何整数   该数组应该属于某个块。

     

从X到Y的块的总和等于A [X] + A [X + 1] + ... + A [Y]。   空块的总和等于0。

     

大和是任何块的最大总和。

     

例如,给出整数K = 3,M = 5和数组A等   的是:

     

A [0] = 2 A [1] = 1 A [2] = 5 A [3] = 1 A [4] = 2 A [5] = 2
  A [6] = 2例如,可以将阵列划分为以下内容   块:

     

[2,1,5,1,2,2,2],[],[],总和为15; [2],[1,5,1,   2],[2,2],总和为9; [2,1,5],[],[1,2,2,2]用a   大笔8; [2,1],[5,1],[2,2,2],总和为6   目标是尽量减少大笔金额。在上面的例子中,6是   最小的一笔。

     

写一个函数:

     

def解(K,M,A)

     

给定整数K,M和非空零索引数组A.   由N个整数组成,返回最小的大数。

     

例如,给定K = 3,M = 5且阵列A使得:

     

A [0] = 2 A [1] = 1 A [2] = 5 A [3] = 1 A [4] = 2 A [5] = 2
  A [6] = 2该函数应返回6,如上所述。

0 个答案:

没有答案