Kth Smallest Product of Two Sorted Arrays in Java2025年5月2日 | 阅读 4 分钟 给定两个已排序的整数数组 nums1 和 nums2,以及一个整数 k。任务是确定 nums1[i] * nums2[j] 的第 k 个(从 0 开始计数)最小乘积,其中 0 <= i < nums1.length 且 0 <= j < nums2.length。 示例 1输入 nums1 = [2,8], nums2 = [3,4,5], k = 4 输出 24 解释: 可能有四个小于或等于 24 的乘积 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 8 * 3 = 24 示例 2输入 nums1 = [-5,-3,0,3], nums2 = [2,4], k = 6 输出 0 解释: 有 6 个可能的小于或等于 0 的乘积 -5*2=-10 -5*4=-20 -3*2=-6 -3*4=-12 0*2=0 0*4=0 示例 3输入 nums1 = [-6,-4,-3,0,1,3,4,7], nums2 = [-5,2,3,4], k = 40 输出 147 暴力破解法算法步骤 1: 要存储组件 A 和 B 的乘积,请创建一个名为 products 的空列表。 步骤 2: 遍历 A 中的每个元素。对于 A 中的每个元素 an,遍历 B 中的每个元素 b,并将 a * b 添加到 products 中。 步骤 3: 使用 Collections.Sort 对乘积列表进行升序排序。 步骤 4: 转到 products 中的索引 k-1 以获取第 k 个最小乘积。返回 products.get(k - 1) 作为结果。 实施上述步骤的实现如下 文件名: KthSmallestProduct.java 输出 Kth Smallest Product is: 6 复杂度分析 时间复杂度: O(m⋅log (m⋅n)) 是时间复杂度。生成所有乘积需要 O(m⋅n),排序它们需要 O(m⋅log (m⋅n))。 空间复杂度: 需要 O(m⋅n) 的空间来将所有 m⋅n 个乘积存储在 products 列表中。 最优方法我们可以利用二分查找潜在的乘积值来找到最佳答案。 算法 步骤 1: 首先,将最小乘积(A[0] * B[0])设为左边界,将最大乘积(A[m-1] * B[n-1])设为右边界。这里,m 和 n 分别代表 A 和 B 的长度。 步骤 2: 当 left 小于 right 时 通过取 left 和 right 的中间值来确定 mid。使用辅助函数 countLessThanOrEqual 来确定有多少个项小于或等于 mid。如果计数小于 k,则将 left 调整为 mid + 1,否则将 right 调整为 mid。循环结束后,第 k 个最小乘积将在左侧。 步骤 3: 对于 A 中的每个元素,计算小于或等于 mid 的乘积的数量。
返回 A 中 an 的总数。 步骤 4: 查找 B 中第一个大于 x 的元素的位置。二分查找 B 中的边界,上界。下界确定 B 中至少存在 x 个元素的第一个位置。 实施 上述步骤的实现如下 文件名: KthSmallestProduct1.java 输出 Kth Smallest Product is: 6 复杂度分析 时间复杂度: O((m+n)log(最大范围)) 对乘积范围进行二分查找需要 O(log(最大范围)),计算小于或等于 mid 的元素需要 O(m+n)。 空间复杂度: O(1) 只使用了固定量的额外空间。 下一主题找不到 JDBC 的合适驱动程序 |
? 在 Java 中,异常可以定义为干扰程序执行正常流程的不必要事件。Java 中的异常主要分为两大类:检查型异常和非检查型异常。Error 类在 Java 中是父类...
阅读 3 分钟
在面向对象编程中,抽象被定义为隐藏用户不需要的细节(实现),而专注于基本信息(功能)。它提高了效率并降低了复杂性。在 Java 中,可以通过抽象类和抽象方法来实现抽象。抽象方法 在 Java 中,抽象方法是...
5 分钟阅读
?在特定时刻存在于 JVM(Java 虚拟机)中的所有 Java 对象都包含在 Java 堆转储中。在堆内存中,JVM 为数组或类实例对象分配空间。垃圾回收器启动...
阅读 3 分钟
使用一种称为“忙等待”的多线程方法,一个线程在不放弃 CPU 控制的情况下一直等待某个条件满足。由于线程在等待时会积极使用 CPU 周期,因此这种策略可能导致 CPU 利用率低下。Java 中的一个线程可能会遇到...
阅读 4 分钟
在直接进入“阻塞队列”主题之前,让我们先简要了解一下队列。队列是对象的有序列表,其中插入发生在列表的尾部,删除发生在列表的前端。因此,它是...
14 分钟阅读
在本节中,我们将学习什么是神秘数字,并创建 Java 程序来检查给定数字是否为神秘数字。神秘数字程序经常在 Java 编码测试和学术界中出现。神秘数字 如果一个数字 N 被称为...
阅读 3 分钟
在 Java 中,类是创建对象的蓝图。它定义了对象的属性和行为。泛型类是可以处理任何类型数据的类。在本文中,我们将探讨如何创建自定义泛型类...
阅读 4 分钟
按日期对数据进行分组是软件开发中的一项常见任务,尤其是在处理大型数据集时。Java 提供了一个强大的功能,称为 Group by 子句,用于按特定列或字段对数据进行分组。在本文中,我们将讨论如何使用...
5 分钟阅读
Java 是一种通用且广泛使用的编程语言,其成功很大程度上归功于其强大的面向对象(OOP)架构。Java OOP 应用程序的核心是其对象模型,这是一个定义数据如何组织、组织和操作的关键概念……
阅读 10 分钟
为了编写更灵活、可重用且类型安全的代码,开发人员需要使用 Java 编程语言的泛型功能。泛型最初在 Java 5 中可用,此后已成为任何 Java 开发人员工具箱中的关键组成部分。在本节中,我们……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India