程序地带

【刷题刷题】移除最多的同行或同列石头


947. 移除最多的同行或同列石头


难度中等177收藏分享切换为英文接收动态反馈


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


如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。


给你一个长度为 n 的数组 stones ,其中 stones[i] = [xi, yi] 表示第 i 块石头的位置,返回 可以移除的石子 的最大数量。


 


示例 1:


输入:stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]]
输出:5
解释:一种移除 5 块石头的方法如下所示:
1. 移除石头 [2,2] ,因为它和 [2,1] 同行。
2. 移除石头 [2,1] ,因为它和 [0,1] 同列。
3. 移除石头 [1,2] ,因为它和 [1,0] 同行。
4. 移除石头 [1,0] ,因为它和 [0,0] 同列。
5. 移除石头 [0,1] ,因为它和 [0,0] 同行。
石头 [0,0] 不能移除,因为它没有与另一块石头同行/列。

示例 2:


输入:stones = [[0,0],[0,2],[1,1],[2,0],[2,2]]
输出:3
解释:一种移除 3 块石头的方法如下所示:
1. 移除石头 [2,2] ,因为它和 [2,0] 同行。
2. 移除石头 [2,0] ,因为它和 [0,0] 同列。
3. 移除石头 [0,2] ,因为它和 [0,0] 同行。
石头 [0,0] 和 [1,1] 不能移除,因为它们没有与另一块石头同行/列。

示例 3:


输入:stones = [[0,0]]
输出:0
解释:[0,0] 是平面上唯一一块石头,所以不可以移除它。

可以看成一个图,然后求连通块,连通分量的个数,然后用总的石头数减连通分量数


class Solution:
def removeStones(self, stones: List[List[int]]) -> int:
n=len(stones)
edge=collections.defaultdict(list)
for i,(x1,y1) in enumerate(stones):
for j,(x2,y2) in enumerate(stones):
if x1==x2 or y1==y2:
edge[i].append(j)
def dfs(x:int):
vis.add(x)
for y in edge[x]:
if y not in vis:
dfs(y)
vis=set()
num=0
for i in range(n):
if i not in vis:
num+=1
dfs(i)
return n-num

 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/drewings/article/details/112689371

随机推荐

unity算法面试_紫龙游戏面试经验

unity算法面试_紫龙游戏面试经验

 作为近几年才成立的游戏公司,紫龙游戏的发展速度还是很快的,尤其梦幻模拟战的爆红,让业内的众多打工人认识到了紫龙游戏。这种新公司的好处是缺人,给...

weixin_39862794 阅读(995)

关于数据结构与算法的总结(更新中)

关于数据结构与算法的总结(更新中)

数据结构与算法前言:本文主要记录数据结构与算法学习过程中的知识点,且基于C语言,获得更好的阅读体验请前往我的hexo博客一.绪论基本概念和术语:数据:数据是指能输入到计算机中并能够被计算机处理的一切对...

Mongshangssd 阅读(246)

tcl脚本中的命令解析

问题1exec是什么exec就是执行一条命令,更直白的理解就是:如果在Linux的Shell中我们可以运行ls这条命令,但是在tcl环境中,运行...

m0_47095451 阅读(940)

windows10安装ssh

windows10安装ssh客户端安装开始->应用与功能->可选功能->添加功能列表中有OpenSSH客户端的选项点击安装OpenSSH客户端安装之后可使用WindowsPowerS...

drive_ 阅读(309)

long转时间 unity_Unity面试经历二(广州站)

long转时间 unity_Unity面试经历二(广州站)

补充:上篇中忘记补充一个点,就是应届生投岗位除了看清楚JD,还要充分的考虑自己所处的位置。因为自己是应届生,觉得投校招可以有三方方便落户什么的&...

编剧苏亮 阅读(380)