讨论/题目交流/🐱 第 12 场夜喵双周赛/
🐱 第 12 场夜喵双周赛

欢迎在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

3 分 - 数组变换
4 分 - 力扣排行榜
5 分 - 树的直径
7 分 - 删除回文子数组

展开讨论
vector<vector<int> >tree(10005);
int dist[10005];
bool mark[10005];
class Solution {
public:
    pair<int, int> bfs(int start){//bfs最大深度的所在叶子节点及最大深度
        memset(dist, 0, sizeof(dist));//重置
        memset(mark, false, sizeof(mark));
        queue<int>que;
        que.push(start);
        mark[start] = true;
        int maxDis = 0, res = 0;
        int frt;
        while(!que.empty()){
            frt = que.front();
            que.pop();
            if(frt == start){
                for(int i = 0; i < tree[frt].size(); ++i){
                    dist[tree[frt][i]] = 1;
                    que.push(tree[frt][i]);
                    mark[tree[frt][i]] = true;
                }
            }
            else{
                bool flag = true;
                for(int i = 0; i < tree[frt].size(); ++i){
                    if(!mark[tree[frt][i]]){
                        dist[tree[frt][i]] = dist[frt] + 1;
                        que.push(tree[frt][i]);
                        mark[tree[frt][i]] = true;
                        flag = false;
                    }
                }
                if(flag && dist[frt] > maxDis){
                    res = frt;
                    maxDis = dist[frt];
                }
            }
        }
        return make_pair(res, maxDis);
    }
    int treeDiameter(vector<vector<int>>& edges) {
        int len = edges.size(), start;
        for(int i = 0; i < len; ++i){
            tree[edges[i][0]].push_back(edges[i][1]);
            tree[edges[i][1]].push_back(edges[i][0]);
        }
        int newSta = bfs(0).first;
        cout << newSta << endl;
        return bfs(newSta).second;
    }
};

这个是树的直径我的提交,但是在输入[[0,1],[1,2],[0,3],[3,4],[2,5],[3,6]]时,本地测试为5是正确的,但提交上去就是2,提示我是错的,很是疑惑,求哪位大佬可以解释一样,想了半天没想通,这是不是bug。

展开全部 12 讨论