1339. 最大区间

1339. 最大区间

中文English

给定一个非负数的整数数组,需要选出一个区间, 使得该区间是所有区间中值最大的一个,我们定义一个区间的值为:区间中的最小数 * 区间所有数的和。

样例

样例 1:

输入:[6, 2, 1]
输出:36
解释:所有区间及其对应的值为:

[6] = 6 * 6 = 36;

[2] = 2 * 2 = 4;

[1] = 1 * 1 = 1;

[6,2] = 2 * 8 = 16;

[2,1] = 1 * 3 = 3;

[6, 2, 1] = 1 * 9 = 9;

因此,最大的值为36。

挑战

最直观的算法复杂度是 O(n^2)O(n2​​) ,请在此基础上优化你的算法。

注意事项

数据范围:1 ≤ len(nums) ≤ 1e6; 0 ≤ nums[n] ≤ 100;

 
 
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param nums: 
    @return: Find the maxmum range value. A range value is defined as the minimum value times the sum of all values in a range.
    """
    """
    大致思路:
    加内外循环,更新max_num,返回
    """
    def maxRange(self, nums):
        # write your code here
        #初始化
        max_num = 0
        d = []
        l = len(nums)

        for i in range(l):
            d.append(nums[i])
            
            for j in range(i, -1, -1):
                current_num = min(nums[j: i + 1])*sum(nums[j:  i + 1])

                if current_num > max_num:
                    max_num = current_num
                
        return max_num

注:lintcode未通过,时间复杂度问题,待优化.

原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13138844.html