Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算团队数量-Javascript_Javascript_Arrays - Fatal编程技术网

计算团队数量-Javascript

计算团队数量-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]并将值添加到包含有效组合的数组中。 最后,将打印包含有效组合的数组的长度

我试图用JavaScript解决下面的问题

有n名士兵排成一行。每个士兵都被分配一名士兵 唯一的评级值

你必须组成一个由3名士兵组成的团队,其中包括以下人员 规则:

选择3名有指数(i,j,k)和等级(等级[i])的士兵, 评级[j],评级[k])。如果:(评级[i]<评级[j],则团队有效<
评级[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