我有m行,其中x和y值用空格分隔,表示用户id。这就像用户x在Facebook或Instagram上跟踪用户y一样。现在如果我们有一对z和y,那么由于z跟踪y,因为我们已经有一个组[x,y],那么我们可以合并z形成[x,y,z]
例:
1 2
3 4
5 6
1 5
我们可以有以下组:
[1 2 5 6]和[3 4],最大组[1,2,5,6]的长度为4将是答案。
这是我对此的方法:
public int process(int m, int[][] arr) {
List<Set<Integer>> list = new ArrayList<>();
int ans = 0;
for(int i=0; i<m; i++) {
int x = arr[i][0], y = arr[i][1];
if(j ==0) {
Set<Integer> set = new HashSet<>();
list.add(set);
set.add(x);
set.add(y);
ans = 2;
continue;
}
boolean found = false;
for(Set<Integer> set : list) {
if(set.contains(x) || set.contains(y)) {
set.add(x);
set.add(y);
ans = Math.max(ans, set.size());
found = true;
break;
}
}
if(!found) {
Set<Integer> set = new HashSet<>();
list.add(set);
set.add(x);
set.add(y);
}
}
return ans;
}
我的方法本身是错误的,因为我生成的列表没有正确分组元素。如何解决这个问题。此外,输入阵列长度可以达到100000,因此需要以较少的时间复杂度来解决这个问题。
约束条件:
x and y can range from 1 to 10^5
aray length can be up to 10^6
您可以使用不相交集,从大小为 1 的每个组开始,并在合并时组合大小。
java prettyprint-override">public int process(int m, int[][] arr) {
class DS {
static int[] p = new int[100001];
static int[] size = new int[100001];
static int find(int x) {
return x == p[x] ? x : (p[x] = find(p[x]));
}
static int merge(int x, int y) {
int rx = find(x), ry = find(y);
if (rx != ry) {
p[rx] = ry;
size[ry] += size[rx];
}
return size[ry];
}
static void init() {
for (int i = 0; i < p.length; i++) {
p[i] = i;
size[i] = 1;
}
}
}
DS.init();
int ans = 0;
for (int[] pair: arr)
ans = Math.max(ans, DS.merge(pair[0], pair[1]));
return ans;
}
问题内容: 对于需要解决的问题之一,我使用for循环找到了数组的最大值,因此我尝试使用递归找到它,这就是我想出的: 因此它可以正常工作并获取最大值,但是我的问题是:对于基本情况,返回a [head]以及对于在开头处的值大于最后一个值的情况,可以吗? 问题答案: 您只需一个计数器即可轻松完成此操作,只需使用您这次想要比较的值的索引即可: 这样可以更好地显示正在发生的情况,并使用默认的“递归”布局,例
问题内容: 我们正在做一个用Java编码的项目(针对JRE 1.6编译),并且需要一些小但显然复杂的功能的帮助:我们想在连接特定的无线网络时执行某些操作,例如,当连接的SSID ==“ myNetworkAtHome时”或类似内容。 在浏览了该站点,谷歌和Java文档之后,我们更加接近了。在此处查看代码后:http : //download.oracle.com/javase/tutorial/n
作为这个问题的一部分,我需要找到: 数字的数量(计数) 数字之和(sum) 数字的平均值(平均值) 哪些数字是偶数(偶数) 哪些数字是奇数(赔率) 我尝试在while循环中执行此操作: 其思想是,当while循环迭代时,它会将它通过的数字与最大值进行比较,并将它在计数中找到的最大值与最大值进行匹配,如果它找到的数字大于最大值,则成为新的最大值。对最小的也是同样的想法。 但它并不起作用。我该怎么办?
以下是任务的具体要求: “首先,启动NetBeans并关闭之前可能打开的所有项目(在顶部菜单“转到文件”)== 然后创建一个名为“MinMax”(不带引号)的新Java应用程序,该应用程序声明一个长度为5的双精度数组,并使用方法使用来自命令行的用户输入填充数组,并打印出数组中的max(最高)和min(最低)值。确定最大值和最小值的方法可能不使用Java中的任何内置排序方法。也就是说,您需要在这些方
问题开始是因为我有一个表(Clientes),其中主键不是自动递增的。我想选择存储在列数据库中的最大值。 类似于此选择,但具有雄辩的ORM(Laravel): 我该怎么做? 我试过: 我不喜欢做一个简单的原始 我来不了。 谢谢大家!
问题内容: 我有这种表,找到最大的标记 学生 外面应该是这样的 但我得到这种输出 我用SQL写这个 我该如何纠正sql? 问题答案: 在SQL Server中,您可以使用 尽管您也可以使用逻辑上等效的标准SQL