程序员面试金典 4.9

BST Sequences:给定一个二叉搜索树,计算所有可以形成该二叉搜索树的数组。

根据二叉搜索树的性质,根一定是数组的首元素,而子树中所有节点也必须满足这个性质,因此可以先将左子树中的所有结果lSeq计算出来,然后再将右子树中的所有结果计算出来rSeq,最后以root->val作为数组首元素,在不改变lSeq[i]rSeq[j]中元素相对顺序的情况下,深搜计算所有可能的数组。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> BSTSequences(TreeNode* root) {
        vector<vector<int>> allSeq;
        enumBSTSequences(root, allSeq);
        return allSeq;
    }
private:
    void enumBSTSequences(TreeNode* root, vector<vector<int>> &allSeq)
    {
        if(root == nullptr){
            allSeq.push_back(vector<int>());
            return;
        }
        vector<vector<int>> lSeq, rSeq;
        enumBSTSequences(root->left, lSeq);
        enumBSTSequences(root->right, rSeq);
        vector<int> lstPre(1, root->val);
        for(size_t i = 0; i < lSeq.size(); i++)
        {
            for(size_t j = 0; j < rSeq.size(); j++)
            {
                weave(lSeq[i], 0, rSeq[j], 0, lstPre, allSeq);
            }
        }
    }
    void weave(vector<int> &lSeq, size_t lIdx, vector<int> &rSeq, size_t rIdx, vector<int> &lstPre, vector<vector<int>> &allSeq)
    {
        if(lIdx == lSeq.size() || rIdx == rSeq.size()){
            allSeq.push_back(lstPre);
            while(lIdx != lSeq.size())
                allSeq.back().push_back(lSeq[lIdx++]);
            while(rIdx != rSeq.size())
                allSeq.back().push_back(rSeq[rIdx++]);
            return;
        }

        lstPre.push_back(lSeq[lIdx]);
        weave(lSeq, lIdx + 1, rSeq, rIdx, lstPre, allSeq);
        lstPre.pop_back();

        lstPre.push_back(rSeq[rIdx]);
        weave(lSeq, lIdx, rSeq, rIdx + 1, lstPre, allSeq);
        lstPre.pop_back();
    }
};
【电动车】基于多目标优化遗传算法NSGAII的峰谷分时电价引导下的电动汽车充电负荷优化研究(Matlab代码实现)内容概要:本文围绕“基于多目标优化遗传算法NSGA-II的峰谷分时电价引导下的电动汽车充电负荷优化研究”展开,利用Matlab代码实现优化模型,旨在通过峰谷分时电价机制引导电动汽车有序充电,降低电网负荷波动,提升能源利用效率。研究融合了多目标优化思想与遗传算法NSGA-II,兼顾电网负荷均衡性、用户充电成本和充电满意度等多个目标,构建了科学合理的数学模型,并通过仿真验证了方法的有效性与实用性。文中还提供了完整的Matlab代码实现路径,便于复现与进一步研究。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事智能电网、电动汽车调度相关工作的工程技术人员。; 使用场景及目标:①应用于智能电网中电动汽车充电负荷的优化调度;②服务于峰谷电价政策下的需求侧管理研究;③为多目标优化算法在能源系统中的实际应用提供案例参考; 阅读建议:建议读者结合Matlab代码逐步理解模型构建与算法实现过程,重点关注NSGA-II算法在多目标优化中的适应度函数设计、约束处理及Pareto前沿生成机制,同时可尝试调整参数或引入其他智能算法进行对比分析,以深化对优化策略的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值