310. Minimum Height Trees

本文探讨了一种使用广度优先搜索(BFS)算法来寻找图中最小高度树的方法。通过从每个顶点出发计算BFS的深度,并选择那些产生最小深度的顶点作为根节点,可以找到图中的最小高度树。尽管该方法直观易懂,但在某些情况下可能会出现超时问题,提示我们需要进一步优化算法的时间复杂度。

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

超时,==,最直接的想法,假设每一个作为BFS的起始点,计算每一个BFS的深度,返回最小的vertex。但是很遗憾 ,超时了。还是要考虑考虑怎么来减少时间的复杂度。

class Solution {
public:

    int BFS(int start,vector<vector<int>>& graph,int n)
    {
        queue<int> nodes;
        queue<int> depth;
        vector<int> visit(n,0);
        int sum=0;

        nodes.push(start);
        depth.push(1);
        visit[start]=1;
        sum=1;

        while((!nodes.empty())&&sum!=n)
        {
            for(int i=0;i<n;i++)
            {
                if(graph[nodes.front()][i]==1&&visit[i]==0)
                {
                    visit[i]=1;
                    nodes.push(i);
                    depth.push(depth.front()+1);
                    sum++;
                }
            }
            nodes.pop();
            depth.pop();
        }
        return depth.back();
    }

    vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) {

        vector<int> temp(n,0);
        vector<vector<int>> graph(n,temp);
        for(int i=0;i<edges.size();i++)
        {
            graph[edges[i].first][edges[i].second]=1;
            graph[edges[i].second][edges[i].first]=1;
        }


        int minHeight=INT_MAX;
        vector<int> result;

        for(int i=0;i<n;i++)
        {
            if(minHeight>BFS(i,graph,n))
            {
                minHeight=BFS(i,graph,n);
                result.clear();
                result.push_back(i);
            }

            else if(minHeight==BFS(i,graph,n))
                result.push_back(i);
            else
            {}

        }
        return result;
    }
};
内容概要:本文介绍了多种开发者工具及其对开发效率的提升作用。首先,介绍了两款集成开发环境(IDE):IntelliJ IDEA 以其智能代码补全、强大的调试工具和项目管理功能适用于Java开发者;VS Code 则凭借轻量级和多种编程语言的插件支持成为前端开发者的常用工具。其次,提到了基于 GPT-4 的智能代码生成工具 Cursor,它通过对话式编程显著提高了开发效率。接着,阐述了版本控制系统 Git 的重要性,包括记录代码修改、分支管理和协作功能。然后,介绍了 Postman 作为 API 全生命周期管理工具,可创建、测试和文档化 API,缩短前后端联调时间。再者,提到 SonarQube 这款代码质量管理工具,能自动扫描代码并检测潜在的质量问题。还介绍了 Docker 容器化工具,通过定义应用的运行环境和依赖,确保环境一致性。最后,提及了线上诊断工具 Arthas 和性能调优工具 JProfiler,分别用于生产环境排障和性能优化。 适合人群:所有希望提高开发效率的程序员,尤其是有一定开发经验的软件工程师和技术团队。 使用场景及目标:①选择合适的 IDE 提升编码速度和代码质量;②利用 AI 编程助手加快开发进程;③通过 Git 实现高效的版本控制和团队协作;④使用 Postman 管理 API 的全生命周期;⑤借助 SonarQube 提高代码质量;⑥采用 Docker 实现环境一致性;⑦运用 Arthas 和 JProfiler 进行线上诊断和性能调优。 阅读建议:根据个人或团队的需求选择适合的工具,深入理解每种工具的功能特点,并在实际开发中不断实践和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值