【问题标题】:How to return the length of a contiguous subarray with specific criteria如何返回具有特定条件的连续子​​数组的长度
【发布时间】:2020-07-23 11:31:43
【问题描述】:

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

-索引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();

【问题讨论】:

  • 您能否分享一些示例,例如问题中的输入和预期输出!
  • 当然,所以我已经将原始数组硬编码在 [3, 4, 1, 6, 2] 中,预期的输出应该是 [1, 3, 1, 5, 1],但是我当前的输出是 [1, 3, 1, 3, 1] 因为我的函数还没有将 i 与不在它旁边的数组元素进行比较。

标签: javascript arrays


【解决方案1】:

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

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]));

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多