javascript - 如何返回具有特定条件的连续子数组的长度
问题描述
我的任务是创建一个数组,该数组采用另一个数组并返回满足以下条件的每个索引的连续子数组的数量:
- 索引 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();
解决方案
您需要向后或向前并计算小于或等于实际元素的项目。
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]));
推荐阅读
- regex - 如何通过 Kotlin 或 Java 中的正则表达式获取字符串的一部分?
- ios - UILabel 不好看起来像位图
- ios - 将渐变设置为 UIView 后,我的 UIElements 没有显示
- tensorflow - GPU 上的 WinML 推理时间比 Tensorflow python 慢 3 倍
- android - Mapbox 示例 - 如何开始?
- c# - 它不允许我使用 or 语句
- angular - 动态插入 mat-checkbox
- mysql - MYSQL - 更新每个组的行号
- android - Android.onCreate (com.google.android.measurement.internal) 中的 ConcurrentModificationException
- mysql - 插入后mySQL消失的记录