求数组中区间中最小数*区间所有数和的最大值
2017-09-16 15:35
232 查看
给定一个数组序列,使得区间经过如下计算的值是所有区间中最大的:区间中的最小数*区间所有数的和
如[6,2,1],则求出区间为[6]
输入:
3
6 2 1
输出:
36
大体思路:
给定一个数组序列,
使得区间经过如下计算的值是所有区间中最大的:
区间中的最小数*区间所有数的和
如[6,2,1],则求出区间为[6]
输入:
3
6 2 1
输出:
36
大体思路: 把每个数字看成最小值,
因为所有数大于0,符合条件的区间越大值越高
扫左扫右,得到边界(第一个小于arr[i]的)
最后依次判断得到答案
如[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; } }
相关文章推荐
- 求数组中区间中最小数*区间所有数和的最大值
- 树状数组求区间最大值
- CF484D 把数组划分成几段,求所有段的最大值-最小值之和的最大值
- 找出数组中最大数和最小数,要求O(3/2n)
- 求所有子数组的和的最大值
- 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1},
- 循环数组求区间最大和
- 【BZOJ1012】【树状数组求区间最值】最大数maxnumber
- 输入10个整数,用函数编程将其中最大数于最小数位置互换,然后输出互换后的数组。
- 求数组中连续区间的和最大
- 树状数组求区间最大值一类问题
- POJ 3616【数状数组求区间最大值 + 简单DP】
- // 1、输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- 树状数组写区间最大值
- 随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和,及第二大值。
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- 求所有子数组的和的最大值。要求时间复杂度为O(n)
- Java编程:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 树状数组求区间最大值
- Python算法与数据结构--求所有子数组的和的最大值