Java 中的最长连续子序列2024年9月10日 | 阅读10分钟 给定一个整数数组。我们的任务是找出输入数组中连续整数子序列的最长长度。在输入数组中,连续整数可能在一起也可能不在一起。 示例:1 输入 int arr[] = {11, 39, 13, 10, 14, 20, 12, 15} 输出 6 解释: 由元素 11, 13, 10, 14, 12 和 15 组成的子序列是长度为 6 的最长连续整数子序列。因此,输出为 6。 示例:2 输入 int arr[] = {136, 141, 156, 135, 144, 133, 134, 192, 143, 132, 142} 输出 6 解释: 由元素 136, 135, 133, 134 和 132 组成的子序列是长度为 5 的最长连续整数子序列。因此,输出为 5。 方法:使用排序我们可以使用排序技术,通过该技术,连续的元素将聚集在一起。之后,我们可以运行一个循环来识别最长的连续元素。观察以下步骤。 步骤 1: 声明两个变量 answer 和 cntConsecutive,并将这两个变量的值都设为 0。 步骤 2: 对输入数组 inputArr[] 进行排序。 步骤 3: 通过遍历输入数组 inputArr[],将唯一元素保留在 distArr[] 数组(或 ArrayList)中。 步骤 4: 现在,遍历 distArr[] 数组以计算连续元素的数量。当找到前一个或下一个连续元素时,持续更新 cntConsecutive 变量。同时,持续更新 answer 变量。 步骤 5: 返回 answer。 观察上述步骤的实现。 文件名: LongestConsecutiveSubsequence.java 输出 For the input array: 11 39 13 10 14 20 12 15 The length of the longest consecutive subsequence is: 6 For the input array: 136 141 156 135 144 133 134 192 143 132 142 The length of the longest consecutive subsequence is: 5 复杂度分析: 由于排序,程序的 time complexity 为 O(N * log(N))。程序的 space complexity 为 O(N),其中 N 是输入数组中存在的元素总数。space complexity 为 O(N) 是因为程序使用了 ArrayList 来存储输入数组的唯一元素。 方法:使用优先队列也可以使用优先队列来找到所需的结果。观察以下步骤。 步骤 1: 创建一个用于存储元素的优先队列。使用循环将所有元素推送到优先队列中。同时,创建一个 answer 变量并将其值设为 0。 步骤 2: 将优先队列的第一个元素存储在名为 count 的变量中。 步骤 3: 从优先队列中移除该元素。 步骤 4: 计算新 peek 元素与移除的第一个元素之间的差值。 步骤 5: 如果差值为 1,则将 count 加 1,然后重复步骤 2 和步骤 3。 步骤 6: 如果差值大于 1,则将 count 设为 1,然后重复步骤 2 和步骤 3。 步骤 7: 如果差值为 0,则重复步骤 2 和步骤 3。 步骤 8: 将 count 变量的值与 answer 变量进行比较,如果 count 的值大于 answer,则将 count 的值赋给 answer 变量。 步骤 9: 直到优先队列为空,重复步骤 2 到 8。 步骤 10: 返回 answer 变量的值。 让我们看看上述步骤的实现。 文件名: LongestConsecutiveSubsequence1.java 输出 For the input array: 11 39 13 10 14 20 12 15 The length of the longest consecutive subsequence is: 6 For the input array: 136 141 156 135 144 133 134 192 143 132 142 The length of the longest consecutive subsequence is: 5 复杂度分析: 程序的 time complexity 和 space complexity 与上一个程序相同。 方法:使用 HashSet我们知道哈希集永远不会包含重复元素。因此,我们将所有元素放入哈希集中,哈希集会简单地丢弃重复值。因此,哈希集中只剩下唯一元素。现在,我们要做的就是找到连续子序列的第一个元素,然后借助哈希集。请看以下步骤。 步骤 1: 创建一个包含整数的哈希集实例。同时,创建一个 answer 变量并将其值设为零。 步骤 2: 将输入数组的所有元素插入哈希集中。 步骤 3: 对于每个元素 inputArr[i],执行以下操作:
步骤 4: 返回 answer 变量的值。 观察上述步骤的实现。 文件名: LongestConsecutiveSubsequence1.java 输出 For the input array: 11 39 13 10 14 20 12 15 The length of the longest consecutive subsequence is: 6 For the input array: 136 141 156 135 144 133 134 192 143 132 142 The length of the longest consecutive subsequence is: 5 复杂度分析: 在上述程序中,一个元素最多可以被遍历三次。因此,程序的 time complexity 为 O(3 * n),渐进地写为 O(n),其中 n 是输入数组中存在的元素总数。程序的 space complexity 与上一个程序相同。 |
LinkedTransferQueue 类中的 removeAll() 方法用于从队列中删除给定集合中存在的所有元素。它是 Java 并发实用程序的一部分,该实用程序在 Java 7 版本中添加,并且它...
11 分钟阅读
1997 年,Sun Microsystems 和 IBM 决定解决软件的访问启用问题。他们的目标是开发一种可访问性 API,应用程序开发人员可以将其实现到 Java 类库中,以使应用程序可访问。结果,Sun Microsystems 编写了可访问性 API 和...
阅读 3 分钟
给定一个整数数组“arr”和一个整数 k。我们有一个空栈和以下两个操作:“Push”和“Pop”。我们还有一个区间为 [1, k] 的整数流。使用两个栈过程将数字推入栈中...
阅读 16 分钟
Java 的基本数据结构 HashMap,使程序员能够有效地存储和检索数据。在处理复杂数据结构时,HashMap 的嵌套是一个有用的概念。在本节中,我们将讨论嵌套 HashMap、它的优点以及在应用程序中的实现。理解和应用 Map...
5 分钟阅读
在 Java 中,ConcurrentModificationException 是一个异常,它告诉我们当其元素正在被并发遍历时,集合在结构上发生了修改。这通常发生在迭代器正在迭代集合时(例如,添加或删除元素)。让...
14 分钟阅读
java.text.RuleBasedCollator 类具有 getRules() 函数。在创建基于规则的排序器对象时,将使用 RuleBasedCollator 类来检索将应用的规则。语法:public String getRules() 参数:此方法不接受任何参数。返回值:使用的规则...
阅读 2 分钟
Java 中的水壶问题是需要解决的最重要问题之一。水壶问题是指我们有两个水壶,“i”升的水壶和“j”升的水壶(0 < i < j)。两个水壶最初都将是空的,并且它们...
阅读 6 分钟
在 Java 中,@SuppressWarnings 被定义为一个注解,用于抑制或忽略编译器由于特定代码而引发的特定警告。简单来说,@SuppressWarnings 注解指示编译器忽略或跳过特定的...
阅读 4 分钟
在 Java 中,正则表达式经常用于使用字符序列定义搜索模式。量词,它决定了字符或字符组的出现次数,是指定搜索范围不可或缺的一部分。这些表达式有助于定义模式规则...
5 分钟阅读
Bus Reservation System 是一个用 Java 编写的基本控制台应用程序,用户可以在其中查看可供预订的巴士,以及预订座位和管理活动预订。该系统有效地处理座位管理,为用户提供无缝的预订体验。该项目实现了面向对象的...
阅读 8 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India