求数组中区间中最小数*区间所有数和的最大值

来源:互联网 发布:一知f君2月13号 编辑:程序博客网 时间:2024/06/05 15:09

给定一个数组序列,使得区间经过如下计算的值是所有区间中最大的:区间中的最小数*区间所有数的和

如[6,2,1],则求出区间为[6]
输入:
3
6 2 1

输出:
36

大体思路:
给定一个数组序列,
使得区间经过如下计算的值是所有区间中最大的:
区间中的最小数*区间所有数的和
如[6,2,1],则求出区间为[6]
输入:
3
6 2 1
输出:
36

大体思路: 把每个数字看成最小值,
因为所有数大于0,符合条件的区间越大值越高
扫左扫右,得到边界(第一个小于arr[i]的)

最后依次判断得到答案

public class test {    public static int function(int[] arr) {        int len = arr.length;        int[] sum = new int[len];        int ans = 0;        for (int i = 0; i < len; i++) {            //右边界            sum[i] = arr[i];            for (int j = i+1; j < len; j++) {                if (arr[j] >= arr[i]) {                    sum[i] += arr[j];                } else {                    break;                }            }            //左边界            for (int j = i-1; j >= 0;j--) {                if (arr[j] >= arr[i]) {                    sum[i] += arr[j];                } else {                    break;                }            }            ans = Math.max(ans,sum[i]*arr[i]);        }        return ans;    }}