今天遇到了一个求最长递增子序列的问题,看了之后就尝试着用Java实现了一下,关于什么是最长递增子序列,这里就不在赘述,可以百度或者Google之,以下为实现的代码:
说明:本段代码实现的功能为
(1)随机生成一个有10个元素的数组,然后输出它的最长递增子序列
(2)输出以其中某一个元素为结尾的最长递增子序列的长度
具体的实现思路在注释中已经详细表明了,比较简单,这里就不再赘述
import java.util.Arrays; import java.util.Random; public class LIS { public static void main(String[] args){ System.out.println("generating a random array..."); LIS lis=new LIS(); int[] oldArray=lis.randomArray(); for (int i = 0; i < oldArray.length; i++) { System.out.print(oldArray[i]+" "); } System.out.println(); System.out.println("最长递增子序列的长度为"); lis.lisGet(oldArray); } public int[] randomArray(){ Random random=new Random(); int[] randomArray=new int[10]; for (int i = 0; i < 10; i++) { randomArray[i]=random.nextInt(10); } return randomArray; } public void lisGet(int[] arrayL ){ int[] lisLength=new int[arrayL.length];//用于记录当前个元素作为最大元素的最长递增序列的长度 for (int i = 0; i < arrayL.length; i++) { //初始化 lisLength[i]=1; } int max=1; for (int i = 1; i < arrayL.length; i++) { for (int j = 0; j <i; j++) { if (arrayL[j]<arrayL[i]&&(lisLength[j]+1)>lisLength[i]) { lisLength[i]=lisLength[j]+1; } if (max<lisLength[i]) { //得到当前最长递增序列的长度以及该子序列的最末元素的位置 max=lisLength[i]; } } } System.out.println(max); System.out.println("第i个元素结尾时最长递增子序列:"+Arrays.toString(lisLength)); //输出数组 } }
以上就是小编为大家带来的LIS 最长递增子序列 Java的简单实现的全部内容了,希望对大家有所帮助,多多支持小牛知识库~
我在阅读了允许K个异常的最长递增子序列后创建了这个线程。我意识到提问的人并没有真正理解这个问题,因为他指的是一个链接,该链接解决了“允许一次更改的最长递增子数组”问题。所以他得到的答案实际上与李的问题无关。 假设给定一个长度为N的数组A。查找允许K个异常的最长递增子序列。 示例:N=9,K=1 A=[3,9,4,5,8,6,1,3,7] 答案:7 说明: 最长递增子序列为:3,4,5,8(或6),
最长增子序列是我们熟知的问题,我用耐心算法给出了一个解决方案。 我曾想过先用我的算法,然后找到长度为N的第一个序列,但不知道该怎么做。 那么,如何从随机整数序列中找到第一个最长的递增子序列呢? 我的代码段: 我的代码返回:1 2 8 第一个序列是:3 6 8 另一个例子: 我的代码正确返回:1 2 3 基本上,只要第一个最长序列与最佳最长序列相同,我的代码就能工作。但是当你有一堆相同长度的最长序列
在最多一个序列存在重复的情况下,可以将最长公共子序列问题转化为最长递增子序列问题。减少问题的过程说明在这里: 假设您有以下序列: 然后,创建一个整数序列S3,其中您必须将S2的每个元素的位置放在S1中(如果元素在S1中不存在,那么忽略那个元素)。在本例中: 这种方法是如何工作的?为什么这种约简解决了寻找最长公共子序列的问题?
我为最长的递增子序列生成了以下代码: 输入:nums=[10,9,2,5,3,7,101,18] 输出:4 说明:最长的递增子序列是[2,3,7,101],因此长度为4。 有人能帮我理解这句话吗 三个点的意义是什么?正如我们所知,映射生成键值对,映射与切片一起做什么?
给定一个列表{x_i},我想要找到从每个元素开始的最长的递增子序列,使得起始元素包含在子序列中。 最明显的方法是对每个元素执行通常的最长递增子序列算法,给出O(n^2logn)。这能打吗?
我为最长的递增子序列编写了一个递归解,它运行得非常好。但是当我在同一个代码上应用dp时,它给出了不同的答案。问题链接:https://practice.geeksforgeeks.org/problems/longest-increasing-subsequence-1587115620/1递归代码: DP代码: 我不知道我做错了什么?对于这个测试用例6(n)6 3 7 4 6 9(arr[]),