题目描述:
这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。
如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。
请你统计并返回能够与至少一台其他服务器进行通信的服务器的数量。
示例 1:
提示:
m == grid.length
n == grid[i].length
1 <= m <= 250
1 <= n <= 250
grid[i][j] == 0 or 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-servers-that-communicate
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
emm比较简单:
暴力法:这里没有使用并查集
对于每个点都判断当前的行和列有没有
class Solution {
public int countServers(int[][] grid) {
// grid 1表示有,0表示没有,2表示已经可以组成,最后统计
int row = grid.length;
int col = grid[0].length;
int result = 0;
for (int i = 0; i < grid.length; i++) {
int[] ints = grid[i];
for (int j = 0; j < ints.length; j++) {
if(grid[i][j] == 1 && isexist(grid,i,j)){
grid[i][j] = 2;
}
}
}
for (int i = 0; i < grid.length; i++) {
for (int i1 : grid[i]) {
if(i1 == 2){
result ++;
}
}
}
return result;
}
public boolean isexist(int [][]grid,int x,int y){
// 行进行遍历
int col = grid[0].length;
int row = grid.length;
for (int i = 0; i < col; i++) {
if(i != y && grid[x][i] != 0){
return true;
}
}
for (int i = 0; i < row; i++) {
if(i != x&& grid[i][y] != 0){
return true;
}
}
return false;
}
}
看看使用并查集
感觉更慢了
class Solution {
public int countServers(int[][] grid) {
int count=0;
int find[][] = new int[grid.length*grid[0].length][2];
int visit[][] = new int[grid.length][grid[0].length];
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++){
if(grid[i][j]==1){
find[count][0]=i;
find[count][1]=j;
count++;
}
}
}
int t=0;
for(int i=0;i<count;i++){
for(int j=i+1;j<count;j++){
if(find[j][0]==find[i][0]||find[j][1]==find[i][1]){
if(visit[find[i][0]][find[i][1]]==0){
visit[find[i][0]][find[i][1]]=1;
t++;
}
if(visit[find[j][0]][find[j][1]]==0){
visit[find[j][0]][find[j][1]]=1;
t++;
}
}
}
}
return t;
}
}