滑动窗口方案
滑动窗口中用到了左右两个指针,它们移动的思路是:以右指针作为驱动,拖着左指针向前走。右指针每次只移动一步,而左指针在内部 while 循环中每次可能移动多步。右指针是主动前移,探索未知的新区域;左指针是被迫移动,负责寻找满足题意的区间。
在最少交换次数中 主要利用的就是滑动窗口的方案解题, 本篇文章主要介绍其他的一些利用滑动窗口的思想的题目。
统计整数由连续自然数相加的数量统计
一个整数可以由连续的自然数之和来表示
给定一个整数, 计算该整数有几种连续自然数之和的表达式,并打印出每一种表达式
输出描述
1.该整数的所有表达式和表达式的个数
如果有多种表达式,自然数个数最少的表达式优先输出
2.每个表达式中按自然数递增输出
例如: 输入 9
输出
9=9
9=4+5
9=2+3+4
Result:3
var equalNumLXSum = function (num) {
let count = 0;
let index = num;
let left = right = 1;
let sum = 0;
let result = [], path = [];
while(index > 0) {
path.push(right);
sum += right;
while(sum > num) {
path.shift();
sum -= left;
left++;
}
sum === num ? (count++, result.unshift(`${num}=${[...path].join('+')}`)) : null;
index--;
right++;
}
result.push(`Result:${count}`)
return result;
}
console.log(equalNumLXSum(9));