gpt4 book ai didi

javascript - 基于多个嵌套值对嵌套数组进行排序的最佳方法

转载 作者:行者123 更新时间:2023-11-28 03:35:41 25 4
gpt4 key购买 nike

我需要确定 [8, 10, 12] 的最经济组合以等于给定数字(8 到 60 之间),并将该组合存储在变量中以供以后使用。数字可以重复(8+8=16、10+10=20 等)。给定的数字始终是偶数。组合超过给定数量 2 是可以接受的(例如给定数量是 14,可接受的组合是 8+8)。

我可以计算组合并将它们存储在嵌套数组中。然后,我可以根据索引之一对数组进行排序,这将在许多情况下解决问题。我尝试了对数组进行一些条件排序,但结果不一致。

我的代码...

var combo = (num) => {
var arr = [];
let units = [8, 10, 12];
for (let i = 0; i < units.length; i++) {
arr.push([units[i],Math.floor(num / units[i]),num%units[i]]);
}
console.log(arr);
};


//combo(24);
//returns
//[[8, 3, 0],[10, 2, 4],[12, 2, 0]]

虽然第一个和第三个嵌套数组都是正确的,但第三个嵌套数组将是最经济且最理想的结果。

//combo(28)
//returns
//[[8, 3, 4],[10, 2, 8],[12, 2, 4]]

在这种情况下,第二个数组就是所需的结果

//combo(42)
//returns
//[[8, 5, 2],[10, 4, 2],[12, 3, 6]]

在本例中,第三个数组是所需的结果,因为稍后用 8 替换 6 将超出给定的 num 2 - 可接受的结果。

我的目标是首先隔离所需的结果并将其存储在单独的变量中或存储在数组中的一致位置(通过排序)以供以后使用。我发现了 1000 种不这样做的方法,但我却没有找到一种成功的方法。当我在业余时间学习时,我将我的 javascript 经验分类为“高级初学者”或“中低级”。我可能从错误的方向接近这个问题,所以非常感谢任何指导。希望我对问题的描述是有意义的。提前致谢。

最佳答案

根据您的评论,最佳解决方案是因子最小且余数为零的解决方案,这是微不足道的。

如果没有找到这样的解决方案,我认为您想要的是首先对第二个字段降序(最小长度)进行排序,然后对全长度的其余部分的百分比进行升序排序,以最大限度地减少截止。考虑:

var combo = (length) => {
var optimals = [];
var suboptimals = [];

[8, 10, 12].forEach( (unit) => {
let lengths = Math.floor(length / unit);
let remainder = length % unit;
let fraction = remainder / unit ;

if ( remainder == 0 )
optimals.push( [unit, lengths] );
else
suboptimals.push( [unit, lengths, remainder, fraction] );
} );

// This only works as long as the original input list is sorted ascending
// Because then we know the most optimal solution must be the one
// with the biggest factor so we can simply return the last solution
if ( optimals.length > 0 )
return optimals[ optimals.length - 1 ];

// Else we sort the suboptimals
suboptimals.sort( (a, b) => {
return a[1] < b[1] ? -1 : // First on # of lengths descending
a[1] > b[1] ? 1 :
a[3] > b[3] ? -1 : // Then on fraction ascending
a[3] < b[3] ? 1 :
0;
});

return suboptimals[0];
};

console.log( combo(24) );
console.log( combo(28) );
console.log( combo(42) );

打印:

> Array [12, 2]
> Array [10, 2, 8, 0.8]
> Array [12, 3, 6, 0.5]

关于javascript - 基于多个嵌套值对嵌套数组进行排序的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com