计算团队数量-Javascript
我试图用JavaScript解决下面的问题 有n名士兵排成一行。每个士兵都被分配一名士兵 唯一的评级值 你必须组成一个由3名士兵组成的团队,其中包括以下人员 规则: 选择3名有指数(i,j,k)和等级(等级[i])的士兵, 评级[j],评级[k])。如果:(评级[i]<评级[j],则团队有效<计算团队数量-Javascript,javascript,arrays,Javascript,Arrays,我试图用JavaScript解决下面的问题 有n名士兵排成一行。每个士兵都被分配一名士兵 唯一的评级值 你必须组成一个由3名士兵组成的团队,其中包括以下人员 规则: 选择3名有指数(i,j,k)和等级(等级[i])的士兵, 评级[j],评级[k])。如果:(评级[i]评级[j]>评级[k]),其中(0我建议使用三个封装的for循环。通过使用外部循环索引的当前值初始化索引,例如k=i,条件(0评级[k]&评级[k]>评级[l]并将值添加到包含有效组合的数组中。 最后,将打印包含有效组合的数组的长度
评级[k])或(评级[i]>评级[j]>评级[k]),其中(0我建议使用三个封装的for循环。通过使用外部循环索引的当前值初始化索引,例如
k=i
,条件(0评级[k]&评级[k]>评级[l]
并将值添加到包含有效组合的数组中。
最后,将打印包含有效组合的数组的长度:
var rating = [2,5,3,4,1];
var combinations = [];
for (i = 0; i < rating.length; i = i+1) {
for (k = i; k < rating.length; k = k+1) {
for (l = k; l < rating.length; l = l+1) {
if (rating[i] < rating[k] && rating[k] < rating[l]) {
combinations.push([rating[i], rating[k], rating[l]]);
}
if (rating[i] > rating[k] && rating[k] > rating[l]) {
combinations.push([rating[i], rating[k], rating[l]]);
}
}
}
}
console.log(combinations);
console.log(combinations.length);
与答案中提供的三个For循环相比,为了获得更好的性能,我现在也只在
rating
数组上迭代一次。数组variations
包含可能成为有效组合的所有变体。条目包括用于确定变体是否为有效组合的函数和e评级
。在评级
数组上的每次迭代中,新的评级[i]
将根据所有变体
进行检查,如果它可能完成当前检查的变体,成为有效的组合
。如果是,则当前变体[k]的评级
存储在组合中
var rating = [2,5,3,4,1];
var variations = [];
var combinations = [];
function less_than(a, b) {
return a < b;
}
function greater_than(a, b) {
return a > b;
}
for (i = 0; i < rating.length; i = i + 1) {
var duplications = [];
for (k = 0; k < variations.length; k = k + 1) {
if (variations[k].ratings.length < 3) {
if (variations[k].comparemethod(rating[i],variations[k].ratings[variations[k].ratings.length-1])) {
// Duplicate current (incomplete) variation
duplications.push({"comparemethod": variations[k].comparemethod, "ratings": variations[k].ratings.slice()});
// Add the current rating to the current variation
variations[k].ratings.push(rating[i]);
}
if (variations[k].ratings.length == 3) {
// we found a valid combination
combinations.push(variations[k].ratings);
}
}
}
// add entries which needed to be duplicated to the variations
variations = variations.concat(duplications);
// add the current rating to the variations
variations.push({comparemethod: less_than, ratings: [rating[i]]});
variations.push({comparemethod: greater_than, ratings: [rating[i]]});
}
console.log(JSON.stringify(combinations));
console.log(combinations.length);
是的,3个封装的循环可以工作。我试图改进解决方案以获得更好的性能。请在上找到优化版本迭代一次。
var rating = [2,5,3,4,1];
var combinations = [];
for (i = 0; i < rating.length; i = i+1) {
for (k = i; k < rating.length; k = k+1) {
for (l = k; l < rating.length; l = l+1) {
if (rating[i] < rating[k] && rating[k] < rating[l]) {
combinations.push([rating[i], rating[k], rating[l]]);
}
if (rating[i] > rating[k] && rating[k] > rating[l]) {
combinations.push([rating[i], rating[k], rating[l]]);
}
}
}
}
console.log(combinations);
console.log(combinations.length);
[ [ 2, 3, 4 ], [ 5, 3, 1 ], [ 5, 4, 1 ] ]
3
var rating = [2,5,3,4,1];
var variations = [];
var combinations = [];
function less_than(a, b) {
return a < b;
}
function greater_than(a, b) {
return a > b;
}
for (i = 0; i < rating.length; i = i + 1) {
var duplications = [];
for (k = 0; k < variations.length; k = k + 1) {
if (variations[k].ratings.length < 3) {
if (variations[k].comparemethod(rating[i],variations[k].ratings[variations[k].ratings.length-1])) {
// Duplicate current (incomplete) variation
duplications.push({"comparemethod": variations[k].comparemethod, "ratings": variations[k].ratings.slice()});
// Add the current rating to the current variation
variations[k].ratings.push(rating[i]);
}
if (variations[k].ratings.length == 3) {
// we found a valid combination
combinations.push(variations[k].ratings);
}
}
}
// add entries which needed to be duplicated to the variations
variations = variations.concat(duplications);
// add the current rating to the variations
variations.push({comparemethod: less_than, ratings: [rating[i]]});
variations.push({comparemethod: greater_than, ratings: [rating[i]]});
}
console.log(JSON.stringify(combinations));
console.log(combinations.length);
[[2,3,4],[5,3,1],[5,4,1]]
3