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

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

目录

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

题目描述

数据范围

输入描述

输出描述

备注

示例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))
<think>嗯,用户想收集和整理华为OD考的题,归纳不同版本的题目内容。首先,我需要明确用户的具体需求是什么。可能用户正在准备参加华为OD考,或者想帮助他人整理资料。不管怎样,整理题需要有系统的方法,否则容易混乱。 首先,用户提到的“题整理方法”和“归纳技巧”是关键。我得考虑如何高效地收集题。可能来源包括网络论坛、社交媒体群组、备考平台,或者官方发布的样题。例如,参考引用中提到的华为OD作弊、难度等问题,说明用户可能担心资料的准确性和完整性,所以需要验证题的真实性。 然后是分类方法。题目可能分为算法、数据结构、编程题等。比如快速排序、动态规划这些算法题常见,字符串处理、数组操作也是高频考点。用户需要按题型、难度或知识点来分类,这样复习起来更有针对性。 接下来是版本差异。不同时间段的题可能有变化,比如2023年新增了某些题型,或者调整了难度。需要对比不同年份的题目,找出趋势,比如是否增加了对特定算法的考察频率。 在归纳技巧方面,建立结构化数据库可能有用,用Excel或Notion管理题目信息。同时,分析高频考点,比如二叉树遍历、链表操作等,帮助用户重点复习。还要注意题目变体,同一题目的不同描述或输入输出变化,这能帮助用户适应题目的灵活性。 用户可能遇到的挑战包括资料分散、真伪难辨,以及版本更新带来的变化。所以需要建议用户多渠道收集,交叉验证,并且定期更新资料库。此外,模拟考试环境,练习手撕代码,也是备考的重要部分。 最后,用户可能还想知道如何利用这些整理好的资料进行有效复习,比如制定学习计划,针对性练习高频题目,或者参加模拟考试。这些都是整理题后的下一步行动,用户可能需要进一步的指导,但当前问题主要集中在整理方法上,所以回答应集中在如何系统化整理和归纳。</think>### 华为OD考试题整理方法与归纳技巧 #### 一、题整理方法 1. **多渠道收集** - **官方渠道**:关注华为招聘官网、官方开发者社区发布的样题或考试大纲[^1] - **技术论坛**:如牛客网、LeetCode讨论区,筛选用户分享的真题回忆录 - **社群资源**:加入备考群组(QQ/微信),整理群成员提供的题目片段 - **模拟平台**:使用第三方考模拟平台(如CodeTop)获取结构化题目 2. **分类标注** - **题型分类**:算法题(动态规划、贪心算法)、数据结构题(链表、二叉树)、数学题(概率计算- **难度分级**:按华为OD定义的★~★★★等级划分,例如: $$T(n) = O(n \log n) \quad \text{// 快速排序类题目通常为★★级}$$ - **版本标识**:通过时间戳(如2023Q3)或地域标识(如南京研究所版)区分 3. **真实性验证** - **交叉比对**:至少3个独立来源确认同一题目 - **代码验证**:对编程题编写测用例,例如: ```python # 两数之和验证用例 assert two_sum([2,7,11,15], 9) == [0,1] ``` #### 二、归纳技巧 1. **结构化数据库** | 字段 | 说明 | 示例 | |------|------|------| | 题目ID | 唯一标识符 | HWOD2023-A01 | | 题干摘要 | 关键描述 | "二叉树层序遍历" | | 核心考点 | 知识点标签 | BFS/队列 | | 变体关联 | 相似题目链接 | HWOD2022-B05 | 2. **高频考点分析** - **Top 5算法**:快速排序、二分查找、DFS/BFS、滑动窗口、回溯法 - **数据结构热点**:链表翻转($O(1)$空间复杂度实现)、堆的应用、图的最短路径 - **数学相关**:排列组合计算(例如卡特兰数应用场景) 3. **版本差异处理** - **时间线对比**:制作版本演化矩阵 | 年度 | 新增题型 | 淘汰题型 | |------|----------|----------| | 2022 | 多线程同步问题 | 纯数学证明题 | | 2023 | 器学习基础题 | 简单数组遍历 | - **地域差异**:某些研究所侧重操作系统题(如内存管理),其他偏向网络编程 #### 三、实践建议 1. **建立自动化流程** - 使用Python爬虫定期抓取论坛新帖(需遵守平台规则) - 用自然语言处理(NLP)提取题目关键特征 ```python # 示例:题干关键词提取 from sklearn.feature_extraction.text import TfidfVectorizer corpus = ["二叉树中序遍历实现","动态规划求最长子序列"] vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(corpus) ``` 2. **变体题目关联** - **同源题目组**:将本质相同但表述不同的题目聚类,例如: - "数组中的第K大元素"(快速选择算法) - "前K个高频元素"(堆+哈希表) 3. **考试环境模拟** - 限制IDE自动补全功能 - 严格遵循输入输出格式: ```text // 输入样例 3 1 2 3 // 输出要求 6 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值