Compute The Number of Intersections in a Sequence of Discs in Java2025 年 5 月 6 日 | 阅读 8 分钟 这是Google、Amazon、TCS、Accenture、Flipkart等顶级IT公司面试中经常遇到的问题。通过解决这个问题,可以考察面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将用不同的方法和逻辑在 Java 中计算圆盘序列中的交点数。我们还将创建相应的 Java 程序。 问题定义给定一个数组 A,其中每个元素 A[i] 表示以位置 i 为圆心的圆盘的半径。您的任务是计算相交圆盘对的数量。
蛮力法代码中使用的 方法是带有排序的蛮力法,其中首先对圆盘的边界进行排序。然后,将所有圆盘对进行比较,以根据它们的边界检查相交情况。 顶部表单 底部表单 算法步骤 1:初始化两个数组 leftBoundaries 和 rightBoundaries,用于存储每个圆盘的最左边界和最右边界。 步骤 2:遍历 radiusArray,对于每个索引 i 处的圆盘
步骤 3:将 leftBoundaries 和 rightBoundaries 数组都按升序排序。 步骤 4:将 intersectionCount 初始化为零。 步骤 5:对于每个圆盘 i
步骤 6:如果在任何时候 intersectionCount 超过 10,000,000,则返回 -1。 步骤 7:完成所有比较后,返回相交的总数(intersectionCount)。 实施文件名:NumberOfIntersection.java 输出 11 时间复杂度:O(n^2) 空间复杂度:O(n) 使用扫描线方法扫描线算法是一种高效的计算几何技术,用于通过将一条线“扫过”平面并按排序顺序处理事件来解决涉及平面上的区间或事件的问题。它通过维护活动的区间或对象来降低时间复杂度,从而在直线前进时能够有效地计算相交数或处理事件。 算法步骤 1:计算圆盘数 n 并初始化 left 和 right 数组以存储边界。 步骤 2:对于每个圆盘,计算 left[i] = i - A[i] 和 right[i] = i + A[i]。 步骤 3:对 left 和 right 数组进行排序。 步骤 4:遍历圆盘
步骤 5:如果相交数超过 10,000,000,则返回 -1;否则,返回总数。 实施文件名:DiscIntersections.java 输出 11 时间复杂度:O(nlog n),其中 n 是圆盘的数量(由于对端点进行排序)。 空间复杂度:O(n),因为我们使用数组来存储左右端点。 使用线段树或 Fenwick 树(二叉索引树)方法使用线段树或 Fenwick 树(二叉索引树)涉及利用这些数据结构来有效地管理和查询活动圆盘的数量。 算法步骤 1:找到每个圆盘的 left (i-A[i]i - A[i]i-A[i]) 和 right (i+A[i]i + A[i]i+A[i]) 边界。 步骤 2:将所有唯一的边界映射到较小的索引。 步骤 3:初始化一个范围树来管理活动范围。 步骤 4:查询每个圆盘的右边界的重叠,并在树中更新活动范围。 步骤 5:返回相交数,如果相交数超过 10710^7107,则返回 -1。 实施文件名:DiscIntersectionCalculator.java 输出 5 时间复杂度:O(nlogn) 辅助空间: O(n) 下一主题Java 中的幸运数字 |
在 Java 中,Iterator 和 ListIterator 都用于遍历集合。Iterator 允许仅向前遍历,并提供 next() 和 remove() 等基本操作。相比之下,ListIterator 支持双向遍历,以及 add()、set() 和 previous() 等附加操作,使其更加通用。Iterator Iterator 接口是...
5 分钟阅读
目标是以逗号分隔的升序打印一个数字数组,其中包含数字 1、2 和 3。如果没有包含数字 1、2 和 3 的数字,则打印 -1。示例 1:输入:num_arr[] = {9821, 627183, 12, 1234} 输出:1234, 627183 说明 9821……
7 分钟阅读
Moser-de Bruijn 序列是一个数字序列,序列中的每个数字都可以表示为 4 的不同幂的总和。之所以是这些数字,是因为它们的二进制表示在从计数开始的偶数位置只有 1...
5 分钟阅读
在 Java 中,图是一种存储一定数量数据的结构。图的概念是从数学借鉴而来,以满足计算机科学领域的需求。它代表连接多个点的网络。在...
11 分钟阅读
? 在 Java 中创建表通常涉及使用数组或集合等数据结构。有几种方法可以在 Java 中创建表。一种方法是使用 JTable 类。在本节中,我们将讨论创建表的各种方法...
阅读 13 分钟
给定一个字符串列表,任务是将字符串列表转换为由逗号分隔的字符串。在 Java 中,当处理格式化和数据处理时,将列表转换为逗号分隔的字符串是一项常见的任务,经常出现,即转换列表...
阅读 2 分钟
?在 Java 中将 double 转换为 String 是一项常见的任务,开发人员经常会遇到,尤其是在处理用户界面、文件输入输出或数据格式化时。Java 提供了多种实现此转换的方法,每种方法都有其自身的优点和用例。在此...
5 分钟阅读
Java 中的 FileDescriptor 类是 java.io 包的一部分,它作为访问底层系统资源以进行输入输出操作的句柄。它代表一个打开的文件、一个套接字或其他字节源/汇。以下是详细说明……
阅读 4 分钟
在本节中,我们将学习什么是序数,并创建 Java 程序来查找序数。序数程序经常在 Java 编码面试和学术界中出现。序数 序数用于表示排名。换句话说,那些定义……
阅读 3 分钟
在数组中查找缺失的数字是编程中一个常见的问题。它经常出现在数据验证、错误检查或解决数学谜题等场景中。在本节中,我们将探讨如何使用 Java 编程语言在数组中查找缺失的数字....
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India