题目描述
给定一个数组,求数组中区间内最小的数乘区间内数字和结果最大,比如数组[3,1,6,4,5,2]。区间6,4,5中,4×(6+4+5)=60,最大为60
思路
思路其实很简单以每个数为最小值,向四周扩散,由于最小得的性质,该操作不会产生重复的操作。但笔者一直在想其它的思路,如果你们有什么其它办法,欢迎在评论区评论,谢谢。
function getR(arr){
//选每个数为最小值,向两边扩展
let result = 0;
let firstP = 0;
let secondP = 0;
let len = arr.length;
for(let j=0;j<arr.length;j++){
firstP = secondP = j;
let tmp_val = arr[j];
firstP--;
while(firstP >= 0){
if(arr[firstP] < arr[j]){
break;
}else{
tmp_val+=arr[firstP];
firstP--;
}
}
secondP++;
while(secondP < len){
if(arr[secondP] < arr[j]){
break;
}else{
tmp_val+=arr[secondP];
secondP++;
}
}
tmp_val = tmp_val * arr[j];
if(tmp_val > result){
result = tmp_val;
}
}
return result;
}
alert(getR([3,1,6,4,5,2]));