目录
根据某条件聚类最小交换次数
考察滑动窗口
题目描述
给出数字K,请输出所有结果小于K的整数组合到一起的最小交换次数。组合一起是指满足条件的数字相邻,不要求相邻后在数组中的位置。
数据范围
-100<=K<=100
-100<=数组中的数值<=100
输入描述
第一行输入数组:1 3 1 4 0
第二行输入K数值:2
输出描述
第一行输出最小较好次数:1
备注
小于2的表达式是1 1 0,共三种可能将所有符合要求数字组合一起,最小交换1次
示例1
输入
1 3 1 4 0
2
输出
1
解析
先找到满足小于K的数量,得到滑动窗口的大小,从左到右滑动窗口,记录窗口中>=K的整数数量即为需要交换的次数,当窗口中>=K的数量最小的时候为最小的交换次数。
答案
function minSwap(str, k) {
let arr = str.split(' ')
let len = arr.filter(v => v < k).length
if (arr.length === len) {
return 0
}
if (len === 0) {
return false
}
let min = arr.slice(0, len).filter(v => v >= k).length
let num = min
let i = len
while (i <= arr.length) {
i++
// 出去的数大于等于k,窗口中不满足条件的数减一
if (arr[i - len - 1] >= k) {
num--
}
// 进来的数大于k,窗口中不满足条件的数加一
if (arr[i] >= k) {
{
num++
}
// 判断窗口中的不满足条件的数是否为最小的
if (num < min) {
min = num
}
}
}
return min
}
console.log(minSwap('1 3 1 4 0', 2))