• 94 移除最多的同行或同列石头


    作者: Turbo时间限制: 1S章节: 其它

    晚于: 2020-09-09 12:00:00后提交分数乘系数50%

    问题描述 :

    我们将石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。

    每次 move 操作都会移除一块所在行或者列上有其他石头存在的石头。

    请你设计一个算法,计算最多能执行多少次 move 操作?

    示例 1:

    输入:stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]]

    输出:5

    示例 2:

    输入:stones = [[0,0],[0,2],[1,1],[2,0],[2,2]]

    输出:3

    示例 3:

    输入:stones = [[0,0]]

    输出:0

    输入说明 :

    首先输入石头的数量n,

    然后输入n行,每行一个坐标x、y,x和y之间以空格分隔。

    1 <= n <= 1000

    0 <= x,y < 10000

    输出说明 :

    输出一个整数

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <vector>
    #include <unordered_set>
    using namespace std;
    
    //同一行或同一列有其他石头才能移除 
    class Solution {
    public:
        int f[20000];
        unordered_set<int> list;
        int removeStones(vector<vector<int>>& stones) 
        {
            for(int i=0;i<20000;i++)
                f[i]=i;
            for(int i=0;i<stones.size();i++)
                union_ij(stones[i][0],stones[i][1]+10000);
            for(int i=0;i<stones.size();i++)
            {
            //    cout<<"insert:"<<" "<<find(stones[i][0]);
                list.insert(find(stones[i][0]));
            }
            return stones.size()-list.size();
        }
        int find(int x)
        {
            if(x!=f[x])
                return f[x]=find(f[x]);
            else
                return x;
        }
    
        void union_ij(int x,int y)
        {
            int fx=find(x);
            int fy=find(y);
           // cout<<"x:"<<" "<<fx<<endl;
           // cout<<"y:"<<" "<<fy<<endl;
            if(fx!=fy)
                f[fx]=fy;
        }
    };
    
    
    int main()
    {
        int n,temp;
        cin>>n;
        vector<vector<int>> stones;
        
        for(int i=0;i<n;i++)
        {
            vector<int> row;
            for(int j=0;j<2;j++)
            {
                cin>>temp;
                row.push_back(temp);
            }
            stones.push_back(row);
        }
        int res=Solution().removeStones(stones);
        cout<<res;
    } 
  • 相关阅读:
    java 静态代码块和spring @value等注解注入顺序
    中秋节
    IP切换
    MMF循环队列实现RPC
    Redis 集群方案
    简单Http多线程下载实现
    信息采集
    大四了
    懒懒交流会《前端,架构,框架与库》里面提到的一些问题
    [知识整理] 导数据工具
  • 原文地址:https://www.cnblogs.com/zmmm/p/13675511.html
Copyright © 2020-2023  润新知