图论第8天

685.冗余连接II

这题需要考虑两种情况:

1.两个输入

2.没有两个输入就是有成环

class Solution
{
public:
    static const int N = 1005;
    int father[N];
    int n;
    void init()
    {
        for (int i = 0; i <= n; i++)
        {
            father[i] = i;
        }
    }
    int find(int x)
    {
        return x == father[x] ? x : father[x] = find(father[x]);
    }
    int isSame(int a, int b)
    {
        a = find(a);
        b = find(b);
        return (a == b);
    }
    void join(int a, int b)
    {
        a = find(a);
        b = find(b);
        if (a == b)
            return;
        father[b] = a;
    }
    bool lianggeshuru(vector<vector<int>> &edges, int deleteNode)
    {
        init();
        for (int i = 0; i < edges.size(); i++)
        {
            if (i == deleteNode)
                continue;
            if (isSame(edges[i][0], edges[i][1]))
            {
                return false;
            }
            join(edges[i][0], edges[i][1]);
        }
        return true;
    }
    vector<int> huan(vector<vector<int>> &edges)
    {
        init();
        for (int i = 0; i < n; i++)
        {
            if (isSame(edges[i][0], edges[i][1]))
                return edges[i];
            join(edges[i][0], edges[i][1]);
        }
        return {};
    }
    vector<int> findRedundantDirectedConnection(vector<vector<int>> &edges)
    {
        n = edges.size();
        int count[N] = {0};
        // 有两个输入
        for (int i = 0; i < n; i++)
        {
            count[edges[i][1]]++;
        }
        vector<int> vec;
        for (int i = n - 1; i >= 0; i--)
        {
            if (count[edges[i][1]] == 2)
            {
                vec.push_back(i);
                cout << i << endl;
            }
        }
        if (vec.size() > 0)
        {
            if (lianggeshuru(edges, vec[0]))
            {
                return edges[vec[0]];
            }
            else
            {
                return edges[vec[1]];
            }
        }
        // 有环
        return huan(edges);
    }
};

默写一遍再。其实突然就对这行代码不理解了,需要做个小实验。其实就是后面可以跟一个等式。

    int find(int x)
    {
        return x == father[x] ? x : father[x] = find(father[x]);
    }

挺好挺好,默写出来啦!!!思路很重要!!!

class Solution {
public:
    static const int N = 1005;
    int father[N] = {0};
    void init(int num){
        for(int i = 0;i < num;i++){
            father[i] = i;
        }
    }
    int find(int x){
        return x == father[x] ? x : father[x] = find(father[x]);
    }
    bool isSame(int a,int b){
        a = find(a);
        b = find(b);
        return (a == b);
    }
    void join(int a ,int b){
        a = find(a);
        b = find(b);
        if(a == b)return;
        father[b] = a;
    }
    bool liashuru(vector<vector<int>>& edges,int deleteNode){
        init(edges.size());// because 1 <= ui, vi <= n
        for(int i = 0;i< edges.size();i++){
            if(i == deleteNode)continue;
            if(isSame(edges[i][0],edges[i][1])){
                return false;
            }
            join(edges[i][0],edges[i][1]);
        }
        return true;
    }
    vector<int> huan(vector<vector<int>>& edges){
        init(edges.size());// because 1 <= ui, vi <= n
        for(int i = 0;i < edges.size();i++){
            if(isSame(edges[i][0],edges[i][1])){
                return edges[i];
            }
            join(edges[i][0],edges[i][1]);
        }
        return {};
    }
    vector<int> findRedundantDirectedConnection(vector<vector<int>>& edges) {
        int n = edges.size();
        int count[N] = {0};
        for(int i = 0;i < n;i++){
            count[edges[i][1]]++;
        }
        vector<int>vec;
        for(int i = n-1;i>=0;i--){
            if(count[edges[i][1]] == 2){
                vec.push_back(i);
            }
        }
        //俩输入
        if(vec.size() > 0){
            if(liashuru(edges,vec[0])){
                return edges[vec[0]];
            }else{
                return edges[vec[1]];
            }
        }
        //有环
        return huan(edges);
    }
};

那明天开始做面试题。

相关推荐

  1. 8

    2024-06-12 15:46:03       6 阅读
  2. 2024-06-12 15:46:03       7 阅读
  3. 5

    2024-06-12 15:46:03       8 阅读
  4. 6

    2024-06-12 15:46:03       9 阅读
  5. 9

    2024-06-12 15:46:03       7 阅读
  6. 第一

    2024-06-12 15:46:03       9 阅读
  7. 第二

    2024-06-12 15:46:03       8 阅读
  8. 算法总结归纳(十二)(剩余的

    2024-06-12 15:46:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 15:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 15:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 15:46:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 15:46:03       20 阅读

热门阅读

  1. 讲解机器学习中的 K-均值聚类算法及其优缺点。

    2024-06-12 15:46:03       8 阅读
  2. 10、前后端本地端联调

    2024-06-12 15:46:03       8 阅读
  3. 处理element ui 表格中 按钮 loading问题

    2024-06-12 15:46:03       6 阅读
  4. 调料食品加工污水处理设备配置

    2024-06-12 15:46:03       5 阅读
  5. Spring-core-MethodParameter

    2024-06-12 15:46:03       6 阅读
  6. 手机照片怎么恢复?10个照片恢复应用程序

    2024-06-12 15:46:03       10 阅读
  7. 给echarts图表添加弧形动画效果

    2024-06-12 15:46:03       7 阅读
  8. PTA:7-184 通过嵌套循环输出二维矩阵

    2024-06-12 15:46:03       11 阅读
  9. Web前端模板引擎:深度解析与应用探索

    2024-06-12 15:46:03       12 阅读
  10. 一台 Linux 服务器最多能支撑多少个 TCP 连接

    2024-06-12 15:46:03       9 阅读
  11. wildcard邀请码

    2024-06-12 15:46:03       8 阅读