最大和乘数

题目描述

给定一个数组,求数组中区间内最小的数乘区间内数字和结果最大,比如数组[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]));

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值