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未通过,时间复杂度问题,待优化.

相关文章:

  • 2022-12-23
  • 2021-07-07
  • 2022-01-25
  • 2021-08-27
  • 2021-09-10
  • 2021-06-09
  • 2021-07-26
  • 2021-09-14
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-07
  • 2022-12-23
  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
相关资源
相似解决方案