zoukankan      html  css  js  c++  java
  • 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;
    } 
  • 相关阅读:
    压缩和还原压缩的JS代码
    1.3(Spring学习笔记)Spring-AOP
    软件配置篇-MySQL下载及安装
    软件配置篇-java下载及安装
    1.2(Spring学习笔记)Spring中的Bean
    1.1(Spring学习笔记)Spring基础(BeanFactory、ApplicationContext 、依赖注入)
    1.6(学习笔记)EL表达式
    1.5 JSP标准标签库(JSTL)(核心标签 out、set、remove、if、choose、forEach、forTokens、redirect)
    1.4(学习笔记)JSP自定义标签
    随机算式
  • 原文地址:https://www.cnblogs.com/zmmm/p/13675511.html
Copyright © 2011-2022 走看看