算法题--华为od机试考试(根据某条件聚类最小交换次数、计算面积、连续出牌数量)

文章介绍了三个编程题目,涉及聚类最小交换次数、滑动窗口算法应用、计算图形面积以及连续出牌策略优化,展示了如何使用JavaScript解决这些问题,涉及到深度遍历、递归等算法技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

根据某条件聚类最小交换次数

题目描述

数据范围

输入描述

输出描述

备注

示例1

输入

输出

解析

答案

计算面积

题目描述

输入描述

取值范围

输出描述

示例一

输入

输出

解析

答案

连续出牌数量

题目描述

输入描述

输出描述

示例1

输入

输出

解析

答案


根据某条件聚类最小交换次数

考察滑动窗口

题目描述

给出数字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))

计算面积

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值