序列划分-使其最大值最小化

问题:给指定的序列划分为3份。取每份的最大值,再从3份最大值取出最大的max。

怎样划分,能够使max最小?
输入:1,2,3,4,5
划分:1,2,3 | 4 |5
最大值为6


思路:两个指针p1,p2,p1索引∈[0,len-2),p2索引∈[p1+1,len-1),最后一份索引范围[p2+1,len-1]


实现:


Array.prototype.sum = function(i,j){
i = i == undefined ?

0 : i; j = j == undefined ? 0 : j; var s = 0; for(var k = i;k <=j ;k++){ s+=this[k]; } return s; } function f(arr){ var result = {val:undefined,p1:"",p2:""}; for(var p1 = 0;p1<arr.length-2;p1++){ var s1 = arr.sum(0,p1); for(var p2 = p1+1;p2<arr.length-1;p2++){ var s2 = arr.sum(p1+1,p2); var s3 = arr.sum(p2+1,arr.length-1); var min = Math.max(Math.max(s1,s2),s3); if(p1==2){ console.log("min : "+min +",p1:"+p1+",p2:"+p2+",s2:"+s2+",s3:"+s3); } if(!result.val || result.val > min){result.val = min;result.p1 = p1;result.p2=p2;} } } return result; } console.log(f(new Array(1,2,3,4,5)));



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值