从零开始读算法导论第三版 求最大子数组和 LUA实现

来源:互联网 发布:女生黄金比例身材算法 编辑:程序博客网 时间:2024/06/17 00:06
A = {13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7}function find_max_crossing_subappay(A, low, mid, high)    local left_sum = nil    local sum = 0    local max_left = -1    for i = mid, low, -1 do        sum = sum + A[i]        if not left_sum or sum > left_sum   then            left_sum = sum            max_left = i        end    end    local right_sum = nil    sum = 0    local max_right = -1    for j = mid + 1, high do        sum = sum + A[j]        if  not right_sum or sum > right_sum  then            right_sum = sum            max_right = j        end    end    return max_left, max_right, left_sum + right_sumendfunction find_maximum_subarray(A, low, high)    if high == low then return low, high, A[low]    else        local mid = math.floor((low + high) / 2)         local left_low, left_high, left_sum = find_maximum_subarray(A, low, mid)        local right_low, right_high, right_sum = find_maximum_subarray(A, mid + 1, high)        local cross_low, cross_high, cross_sum = find_max_crossing_subappay(A, low, mid, high)        if left_sum >= right_sum and left_sum >= cross_sum then            return left_low, left_high, left_sum        elseif right_sum >= left_sum and right_sum >= cross_sum then            return right_low, right_high, right_sum        else            return cross_low, cross_high, cross_sum        end    endendprint(find_maximum_subarray(A,1,#A))

原创粉丝点击