How to determine the longest increasing subsequence using dynamic programming?

前端 未结 19 2596
醉梦人生
醉梦人生 2020-11-22 10:55

I have a set of integers. I want to find the longest increasing subsequence of that set using dynamic programming.

19条回答
  •  一个人的身影
    2020-11-22 11:38

    Longest Increasing Subsequence(Java)

    import java.util.*;
    
    class ChainHighestValue implements Comparable{
        int highestValue;
        int chainLength;
        ChainHighestValue(int highestValue,int chainLength) {
            this.highestValue = highestValue;
            this.chainLength = chainLength;
        }
        @Override
        public int compareTo(ChainHighestValue o) {
           return this.chainLength-o.chainLength;
        }
    
    }
    
    
    public class LongestIncreasingSubsequenceLinkedList {
    
    
        private static LinkedList LongestSubsequent(int arr[], int size){
            ArrayList> seqList=new ArrayList<>();
            ArrayList valuePairs=new ArrayList<>();
            for(int i=0;i aList=new LinkedList<>();
                    aList.add(arr[i]);
                    seqList.add(aList);
                    valuePairs.add(new ChainHighestValue(arr[i],1));
    
                }else{
                    try{
                        ChainHighestValue heighestIndex=valuePairs.stream().filter(e->e.highestValue aList=new LinkedList<>();
                        aList.add(arr[i]);
                        seqList.add(aList);
                        valuePairs.add(new ChainHighestValue(arr[i],1));
                    }
                }
            }
            ChainHighestValue heighestIndex=valuePairs.stream().max(ChainHighestValue::compareTo).get();
            int index=valuePairs.indexOf(heighestIndex);
            return seqList.get(index);
        }
    
        public static void main(String[] args){
            int arry[]={5,1,3,6,11,30,32,5,3,73,79};
            //int arryB[]={3,1,5,2,6,4,9};
            LinkedList LIS=LongestSubsequent(arry, arry.length);
            System.out.println("Longest Incrementing Subsequence:");
            for(Integer a: LIS){
                System.out.print(a+" ");
            }
    
        }
    }
    

提交回复
热议问题