java当等于一个某值则显示_求哪几个数字之和接近某一个给定的值(小于等于)...

这道题, 其实他和另外一道题很相似,

有一个数组arr = [1,2,3,4,5,6,7],数组内的哪些元素相加, 和等于 8?

编写函数build(arr, n) 返回 [ [ 1, 2, 5 ], [ 1, 3, 4 ], [ 1, 7 ], [ 2, 6 ], [ 3, 5 ] ]

不同之处在于, 你这个是 求小于等于, 且仅要求最接近, 只需要将代码稍加改造,

先上 上面那个问题的代码,

function buildArr(arr, lim) {

arr = [... new Set(arr.filter(item => item <= lim && item > 0).sort((a, b) => a > b))];

var result = [];

var len = arr.length;

each(-1, [], 0);

function each(s, a, n) {

for(var i = s +1; i < len && n < lim; i++) {

var A = [... a, arr[i]];

var N = n + arr[i];

if(N < lim) {

each(i, A, N);

} else if(N == lim) {

result.push(A);

}

}

}

return result;

}

console.log(buildArr([1,2,3,4,5,6,7], 8));

再来看你这个问题, 其实稍加改造,

function buildArr(arr, lim) {

arr = [... new Set(arr.filter(item => item <= lim && item > 0).sort((a, b) => a > b))];

var result = [];

var num = 0;

var len = arr.length;

each(-1, [], 0);

function each(s, a, n) {

if(n == lim) {

return;

}

for(var i = s +1; i < len && n < lim; i++) {

var A = [... a, arr[i]];

var N = n + arr[i];

if(N < lim) {

if(N > num) {

result = A;

num = N;

}

each(i, A, N);

} else if(N == lim) {

result = A;

num = N;

}

}

}

return result;

}

这样就可以了...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值