- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 HackerRank 上遇到了这个问题。 https://www.hackerrank.com/challenges/friend-circle-queries/problem我尝试使用自定义链表 - NodeList 来解决它。它具有三个字段 - Node first、Node current、int size。 “add”是一个重载方法。它可以添加一个值或另一个 NodeList。我已将 NodeList 的代码放在注释中,因为它并不重要。
字段:-
static HashMap<Integer, Integer> personToIndex = new HashMap<>();
static int largestCircleSize = 0;
static ArrayList<NodeList> groups = new ArrayList<>();
这是我的业务逻辑方法。当 friend 圈中只有一个人时,我会将另一个人添加到圈子中。当握手的两个人都已经是其他圈子的一部分时,我会合并这些圈子。
static void updateFriendCircles(int friend1, int friend2) {
int friend1Index, friend2Index;
NodeList toUpdate;
friend1Index = personToIndex.getOrDefault(friend1, -1);
friend2Index = personToIndex.getOrDefault(friend2, -1);
if (friend1Index != -1) {
NodeList list = groups.get(friend1Index);
if (friend2Index != -1) {
NodeList list2 = groups.get(friend2Index);
if (list.first == groups.get(friend2Index).first)
return;
toUpdate = list.add(list2);
groups.set(friend2Index, list);
}
else {
toUpdate = list.add(friend2);
personToIndex.put(friend2, friend1Index);
}
}
else if (friend2Index != -1) {
toUpdate = groups.get(friend2Index).add(friend1);
personToIndex.put(friend1, friend2Index);
}
else {
int index = groups.size();
personToIndex.put(friend1, index);
personToIndex.put(friend2, index);
toUpdate = new NodeList(friend1).add(friend2);
groups.add(toUpdate);
}
if (toUpdate.size > largestCircleSize)
largestCircleSize = toUpdate.size;
}
我也尝试过使用HashSet,但它也有同样的问题,所以我认为问题不在于数据结构。
最佳答案
由于尚不清楚解决方案到底出了什么问题(OP 未指定) - 某些测试用例的答案错误或超时,我将解释如何解决它。
我们可以使用disjoint set表示 friend 圈集合的数据结构。
基本思想是,在每个圈子中,我们分配一个成员来代表给定的圈子。我们可以称其为根。查找圈中的成员数量始终委托(delegate)给存储其大小的根。
每个非根成员都指向他的根成员或指向他可以到达根的成员。将来,当前的根也可能会失去社区的根状态,但随后它将指向新的根,因此始终可以通过链式调用来访问它。
当 2
个圆圈合并时,会从 2
个先前的根成员中选择一个新的根成员。可以将新的尺寸设置到其中,因为之前的根已经包含两个圆的尺寸。但新的根是如何选择的呢?如果圆1
的大小不小于圆2
的大小,则将其选为新根。
因此,对于这个问题,首先我们应该为圆
和大小
定义占位符:
Map<Integer, Integer> people;
Map<Integer, Integer> sizes;
对于 people
中的非 root 成员,key 是人员 ID,value 是他关注的 friend (root 或可以让他到达 root 的父级)。根成员在 map 中没有条目。
然后,我们需要一个方法来获取任何成员的根:
int findCommunityRoot(int x) {
if (people.containsKey(x)) {
return findCommunityRoot(people.get(x));
}
return x;
}
最后,我们需要一种方法来为2
给定的 friend 建立社区:
int mergeCommunities(int x, int y) {
//find a root of x
x = findCommunityRoot(x);
//find a root of y
y = findCommunityRoot(y);
// one-man circle has a size of 1
if (!sizes.containsKey(x)) {
sizes.put(x, 1);
}
// one-man circle has a size of 1
if (!sizes.containsKey(y)) {
sizes.put(y, 1);
}
// friends in the same circle so just return its size
if (x == y) {
return sizes.get(x);
}
sizeX = sizes.get(x);
sizeY = sizes.get(y);
if (sizeX >= sizeY) {
people.put(y, x);
sizes.put(x, sizeY + sizeX);
return sizes.get(x);
} else {
people.put(x, y);
sizes.put(y, sizeY + sizeX);
return sizes.get(y);
}
}
因此,我们拥有在每次迭代时保存最大圆尺寸所需的一切:
List<Integer> maxCircle(int[][] queries) {
List<Integer> maxCircles = new ArrayList<>();
int maxSize = 1;
for (int i = 0; i < queries.length; i++) {
int size = mergeCommunities(queries[i][0], queries[i][1]);
maxSize = Math.max(maxSize, size);
maxCircles.add(maxSize);
}
return maxCircles;
}
关于java - 合并社区并找到最大社区的规模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55077964/
我正在尝试缩放 :before我的内容 到目前为止,悬停时会应用样式,但没有视觉变化,:before保持相同的比例。 到目前为止我得到了什么: 12 SASS(CSS): .c
我正在使用 CGAffineTransformMake 转换 View 。它可以旋转、缩放和平移。这很好用。但我无法找到一种方法将比例限制为最大尺寸。 如果超出比例,我仍然需要应用当前的旋转和平移。
我想知道当我无法访问存储它的实际硬盘时是否有办法确定我的 svn repo 的大小?我之所以这么问,是因为我们的项目托管在谷歌代码上。有 1GB 的限制。我怀疑我们是否接近它,但我真的不知道并且想密切
抱歉,我已经花了大约 5 个小时来研究这个问题,但无法弄清楚发生了什么。我正在玩 http://bl.ocks.org/mbostock 上的一些示例网站并尝试向堆积条形图添加图例。 为此,我设置了比
我正在使用这个: var response = client.Search(s => s.Query(q => q.Ids(c => c.Values(new List(tempDictionary.
我想扩展一个 wildfly 容器,该容器暴露了多个端口并具有确定性结果。 docker-compose.yml version: '3' services: wildfly-server:
我目前正在使用 Linode 来部署我的应用程序。我有 2 台服务器,1 台数据库服务器,前面有 1 个负载均衡器。 我使用Redis作为数据库和NowJS来实现聊天室。使用 Pub/Sub 一切正常
在开发过程中,我需要经常更新我的 Web 应用程序源代码并将更新后的 war 部署到远程 Tomcat 服务器。上传一场大战 (25MB) 在我的连接上花费的时间太长(大约 30 分钟),这非常低效。
我有一个在生产中需要 websocket 连接的网络服务器。我使用 docker-compose 和 nginx 作为代理来部署它。 所以我的撰写文件如下所示: version: '2' servic
我的 Web 服务是在 Grails/Gradle 中创建的,其中包含许多依赖项 jar,使得部署在 tomcat8 中的 war 规模很大。有没有什么办法可以让我的 war 使用来自不同位置的依赖项
我是一名优秀的程序员,十分优秀!