首页 > 解决方案 > 如何返回具有特定条件的连续子​​数组的长度

问题描述

我的任务是创建一个数组,该数组采用另一个数组并返回满足以下条件的每个索引的连续子数组的数量:

- 索引 i 处的值是子数组的最大值 - 连续子数组必须以 i 开头或结尾

我快到了,但我错过了确保函数检查不直接位于 i 两侧的数组元素的代码(请参阅下面的代码)。我想我可能需要某种递归调用,在传递“向前”和“向后”的更新值时再次运行 if 语句。或者,也许我完全采取了错误的方法。

有任何想法吗?

function countSubarrays(arr){
  var arr = [3, 4, 1, 6, 2];
  var output = [];

  for (var i = 0; i < arr.length; i++){
    var total = 1;
    var forward = 1;
    var backward = 1;

    if (arr[i] >= arr[i+forward]) {
      total++;
      forward++;
      // Some sort of recursive call here?
    }

    if (arr[i] >= arr[i-backward]){
      total++;
      backward++;
      // Some sort of recursive call here?
    }

    output.push(total);
  }
  console.log(output);
}

countSubarrays();

标签: javascriptarrays

解决方案


您需要向后或向前并计算小于或等于实际元素的项目。

function countSubarrays(array) {
    var output = [];

    for (let i = 0; i < array.length; i++) {
        let value = array[i],
            total = 1;
            j = i;
        while (j-- && value >= array[j]) total++;
        j = i;
        while (++j < array.length && value >= array[j]) total++;
        output.push(total);
    }
    return output;
}

console.log(countSubarrays([3, 4, 1, 6, 2]));


推荐阅读