Java 中最长奇偶子序列2024 年 9 月 10 日 | 阅读 7 分钟 Java 中最长奇偶子序列是一个问题,需要在一个大小为 s 的非负数组中找到一个子序列,该子序列以交替的方式包含奇偶数。因此,需要找到具有交替奇偶数序列的最长子序列中的元素数量。请注意,子序列可以以偶数或奇数开头。让我们通过一些例子来理解它。 例如 输入: int arr[] = {15, 16, 19, 14, 17, 18, 21, 30, 78}, //Size s = 9 输出 8 解释: 所需的最长子序列是 (15, 16, 19, 14, 17, 18, 21, 30) 或 (15, 16, 19, 14, 17, 18, 21, 78),子序列中的元素数量为 8。 输入: int arr[] = {11, 112, 12, 122, 15, 130, 131, 140, 117, 111}, //Size s = 10 输出 7 解释: 所需的最长子序列是 (11, 112, 15, 130, 131, 140, 117) 或 (11, 112, 15, 130, 131, 140, 111),或者可能还有其他子序列,子序列中的元素数量为 7。 方法有两种方法可以找出最长的奇偶子序列。一种是暴力法,也称为朴素法。另一种是使用动态规划的高效方法。让我们从朴素法开始。 朴素方法在这种方法中,我们将找出给定数组的所有可能子序列。然后,对于所有计算出的子序列,我们将过滤出最长的奇偶子序列。为了更好地理解,请观察以下程序。 文件名: OddEvenSeq.java 输出 For the input array: 15 16 19 14 17 18 21 30 78 The longest odd even subsequence is: 8 For the input array: 11 112 12 122 15 130 131 140 117 111 The longest odd even subsequence is: 7 复杂度分析: 在上述程序中,有两个选择;一个是包含该元素,另一个是排除该元素。因此,该程序的时间复杂度是指数级的,即 O(2n),其中 n 是数组中存在的元素总数。时间复杂度 O(2n) 非常大。因此,对于包含大量元素的输入数组,上述程序不适用。此外,程序占用了大量额外的空间,这也是指数级的 O(2n)。 实现:动态规划设 longLen(j) 为以索引 j 结尾的最长奇偶子序列 (LOES) 的长度,使得 a[j] 是 LOES 的最后一个元素。因此,longLen(j) 可以递归地写为:longLen(j) = 1 + max(longLen(i)),其中 0 < i < j 且 (a[i] < a[j]) 且 (a[i]+a[j]) % 2 != 0;或者 longLen(j) = 1,如果不存在这样的 i。为了计算给定数组的最长奇偶子序列,需要返回 max(longLen(j)),其中 0 < j < size。 以下程序实现了上述递归关系中的动态规划方法。 文件名: OddEvenSeq1.java 输出 For the input array: 15 16 19 14 17 18 21 30 78 The longest odd even subsequence is: 8 复杂度分析: 上述程序使用了 2 级嵌套的 for 循环。因此,该程序的时间复杂度为 O(n2),其中 n 是数组中存在的元素总数。该程序使用数组作为额外的内存,大小为 n。因此,该程序的空间复杂度为 O(n)。 下一个主题Java 计算当前日期减去几天 |
? Java 是一种常用于创建各种应用程序的编程语言。接受用户输入是任何程序中最常见的任务之一。在本节中,我们将讨论如何在 Java 中接受日期。日期是每个...
阅读 4 分钟
C 语言 C 是一种通用、结构化、过程式和高级编程语言,由 Dennis MacAlistair Ritchie 于 1972 年在贝尔实验室开发。C 语言的后继者是 CPL(组合编程语言)。它主要用于系统编程,例如开发操作系统……
5 分钟阅读
我们收到一个字符串作为输入。任务是确定给定的字符串是否以大写字母开头。示例 1:输入:String s = "Hello World" 输出:这是一个有效字符串。说明:给定的字符串以“H”开头,这是一个大写字母。示例 2:输入:String s...
阅读 3 分钟
在本节中,我们将创建一个 Java 程序并找到一个数的排列和循环排列。在继续本节之前,我们将首先通过示例理解排列。排列在数学中,排列是一种方法或技术,我们可以从中确定...
7 分钟阅读
向量是既有大小又有方向的数学实体。在计算机编程中,向量通常用于表示同时具有大小和方向的量,例如速度、力、位移。Java 作为一种流行的面向对象编程语言,通过……为向量运算提供了内置支持。
阅读 8 分钟
在 Java 中,日期在计算日期差异方面起着非常重要的作用。在设计应用程序时,日期可以是加入组织、入学日期、约会日期等。很多时候我们需要计算两个日期之间的差异。可能有一个以上的...
阅读9分钟
FloatBuffer put() 主要有两种方法,它们接受不同的参数。put(float f) put(int index, float f) i. put(float f) java.nio.FloatBuffer 类具有 put(float f) 函数。新生成的浮点缓冲区以指定浮点数写入当前位置,然后位置会递增...
5 分钟阅读
? 序列化是 Java 中的一项重要功能,它允许将对象转换为字节流,然后可以存储或传输。在面向对象编程中,有时可能需要使特定字段可序列化以确保其状态...
阅读 3 分钟
锁 Java 中的锁是同步原语,用于控制对共享资源或代码关键部分的访问,以确保一次只有一个线程可以访问它们。锁是一种简单的同步构造,允许一个线程在...上获取锁。
阅读 10 分钟
Manacher's Algorithm 是一个用于确定给定字符串中最长回文子串的知名方法。它由Glenn K. Manacher于1975年引入。该算法利用回文对称的概念来减少查找最长回文子串所需的比较次数。Manacher的...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India