我是否需要运行内部循环,以便此函数可以返回k
大小增加的数组子序列。我在网上的几篇文章的帮助下做了以下几点。截至目前,它按预期返回最长的子序列。
function findKSizeSubSequence(array, k) {
if(array.length < k)
return;
var maxCount = 0, count = 0;
var prev = array[0];
var m = [];
for(var i = 0;i < array.length;i++) {
if(prev <= array[i]) {
count++;
m.push(array[i]);
} else {
count = 1;
}
if(count > maxCount)
maxCount = count;
prev = array[i];
}
return m;
}
但是,如果我只希望它返回k
大小增加的子序列。
例如:
findKSizeSubSequence([3,1,4,2,5,1,6,4,7], 4);
应仅返回[3,4,5,6]
findKSizeSubSequence([3,1,4,2,5,1,6,4,7], 2);
应仅返回[3,4]
答案 0 :(得分:1)
只需在循环中添加一个数组长度。如果长度与k匹配,那么只需从循环中退出。
E.g:
function findKSizeSubSequence(array, k) {
if(array.length < k)
return;
var maxCount = 0, count = 0;
var prev = array[0];
var m = [];
for(var i = 0;i < array.length;i++) {
if(prev <= array[i]) {
count++;
m.push(array[i]);
if(m.length === k){
break;
}
} else {
count = 1;
}
if(count > maxCount)
maxCount = count;
prev = array[i];
}
return m;
}
答案 1 :(得分:0)
但是,如果我只希望它返回k大小增加的子序列。
最短的回答是
替换
return m;
通过
return m.slice(0,k);
通过在push
语句之后添加支票
if(prev <= array[i]) {
count++;
m.push(array[i]);
if ( m.length == k ) //this condition will stop the loop as soon as `k` elements have been pushed to `m`
{
break;
}
}
答案 2 :(得分:0)
如果达到计数,您可以使用早期退出的不同样式。
function findKSizeSubSequence(array, count) {
var result = [array[0]];
array.some(function (a) {
if (a > result[result.length - 1]) {
result.push(a);
return result.length === count;
}
});
return result;
}
console.log(findKSizeSubSequence([3, 1, 4, 2, 5, 1, 6, 4, 7], 4));
console.log(findKSizeSubSequence([3, 1, 4, 2, 5, 1, 6, 4, 7], 2));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;