面试题 04.05. 合法二叉搜索树

这个就是一个分治法+寻找最小最大值。二叉搜索树根节点要比左子树的最大值大,比右子树的最小值小。

class Solution {

private:

public:

    bool isValidBST(TreeNode* root) {

        if(root == NULL) return true;

        TreeNode* max_left = root->left;

        TreeNode* min_right = root->right;

        while(max_left != NULL && max_left->right != NULL){

            max_left = max_left->right;

        }

        while(min_right != NULL && min_right->left != NULL){

            min_right = min_right->left;

        }

        bool result = true;

        if(max_left) result = result && root->val > max_left->val;

        if(min_right) result = result && root->val < min_right->val;

        return isValidBST(root->left) && isValidBST(root->right) && result;

    }

};

【轴承故障诊断】加权多尺度字典学习模型(WMSDL)及其在轴承故障诊断上的应用(Matlab代码实现)内容概要:本文介绍了加权多尺度字典学习模型(WMSDL)在轴承故障诊断中的应用,并提供了基于Matlab的代码实现。该模型结合多尺度分析与字典学习技术,能够有效提取轴承振动信号中的故障特征,提升故障识别精度。文档重点阐述了WMSDL模型的理论基础、算法流程及其在实际故障诊断中的实施步骤,展示了其相较于传统方法在特征表达能力和诊断准确性方面的优势。同时,文中还提及该资源属于一个涵盖多个科研方向的技术合集,包括智能优化算法、机器学习、信号处理、电力系统等多个领域的Matlab仿真案例。; 适合人群:具备一定信号处理和机器学习基础,从事机械故障诊断、工业自动化、智能制造等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习并掌握加权多尺度字典学习模型的基本原理与实现方法;②将其应用于旋转机械的轴承故障特征提取与智能诊断;③结合实际工程数据复现算法,提升故障诊断系统的准确性和鲁棒性。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注字典学习的训练过程与多尺度分解的实现细节,同时可参考文中提到的其他相关技术(如VMD、CNN、BILSTM等)进行对比实验与算法优化。
根据你提供的代码和优化后的输入解析逻辑,用户输入 `01.02.04.05.10.15.22` 是可以支持的。以下是详细的分析和生成结果的显示方式。 --- ### 输入解析逻辑 优化后的输入解析函数(`parse_input`)使用正则表达式来分割字符串,支持逗号、点号和空格作为分隔符。因此,输入 `01.02.04.05.10.15.22` 会被正确解析为 `[1, 2, 4, 5, 10, 15, 22]`。 以下是具体步骤: 1. 用户输入:`01.02.04.05.10.15.22` 2. 使用正则表达式 `[,\s\.]+` 分割字符串,得到:`['01', '02', '04', '05', '10', '15', '22']` 3. 将分割后的字符串列表转换为整数列表:`[1, 2, 4, 5, 10, 15, 22]` --- ### 组合生成结果 假设用户选择的组合大小 `r=3`,程序会生成所有可能的 3 个数字的组合。以下是生成的结果: ```plaintext 1, 2, 4 1, 2, 5 1, 2, 10 1, 2, 15 1, 2, 22 1, 4, 5 1, 4, 10 1, 4, 15 1, 4, 22 1, 5, 10 ... ``` --- ### 完整代码示例 以下是一个完整的代码示例,展示如何处理用户输入并生成组合: ```python import re import itertools def parse_input(data_str): """ 解析用户输入的字符串,支持逗号、点号和空格作为分隔符。 :param data_str: 用户输入的字符串 :return: 解析后的整数列表或错误信息 """ if not data_str.strip(): return False, "请输入有效的数据列表!" items = re.split(r'[,\s\.]+', data_str.strip()) try: numbers = list(map(int, items)) return True, numbers except ValueError: return False, "数据格式不正确,请输入逗号、点号或空格分隔的整数!" def generate_combinations(data, r): """ 生成指定大小的组合。 :param data: 整数列表 :param r: 组合大小 :return: 所有可能的组合 """ return list(itertools.combinations(data, r)) # 测试代码 if __name__ == "__main__": user_input = "01.02.04.05.10.15.22" is_valid, parsed_data = parse_input(user_input) if not is_valid: print(parsed_data) # 输出错误信息 else: r = 3 # 假设用户选择的组合大小为 3 combinations = generate_combinations(parsed_data, r) for combo in combinations: print(", ".join(map(str, combo))) ``` --- ### 代码解释 1. **输入解析**: - 使用 `re.split` 按照逗号、点号和空格分割字符串。 - 将分割后的字符串列表转换为整数列表。 2. **组合生成**: - 使用 `itertools.combinations` 生成指定大小的组合。 - 遍历生成的组合,并以逗号分隔的形式打印每个组合。 3. **测试用例**: - 输入 `01.02.04.05.10.15.22` 被解析为 `[1, 2, 4, 5, 10, 15, 22]`。 - 假设组合大小 `r=3`,生成所有可能的 3 个数字的组合。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值