-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLICS-Assignement
More file actions
105 lines (89 loc) · 2.24 KB
/
LICS-Assignement
File metadata and controls
105 lines (89 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class LongestCommonIncreasingSubsequence{
public static void main (String []args)
{
long A[]={7,8,9,10,1,2,3,4};
long B[]= {-1,4,23,0,1};
// Scanner S=new Scanner(Sys em.in);
// System.out.println("Enter size of first list");
// int Asize=S.nextInt();
// System.out.println("Enter size of second list");
// int Bsize=S.nextInt();
// long A[]=new long[Asize];
// long B[]=new long[Bsize];
// System.out.println("Enter elements of first list");
// for(int i=0;i<Asize;i++)
// {
// A[i]=S.nextLong();
// }
// System.out.println("Enter elements of second list");
// for(int i=0;i<Bsize;i++)
// {
// B[i]=S.nextLong();
// }
// int Asize=sizeof(A)/sizeof(A[0]);
// int Bsize=sizeof(B)/sizeof(B[0]);
List<Long> list =new ArrayList<Long>();
list=LongestCommonIncreasingSubsequence.findCS(A,B,list);
LongestCommonIncreasingSubsequence.findLICS(list);
}
public static List<Long> findCS(long A[],long B[],List<Long>list)
{
int flag=0;
for(int i=0;i<B.length;i++)
{
for(int j=0;j<A.length;j++)
{
if(B[i]==A[j])
{
list.add(B[i]);break;
}
}
}
return list;
}
public static void findLICS(List<Long> list)
{
if(list.isEmpty())
{System.out.println("There is no common subsequence between the two lists");return;}
long[] arr=new long[list.size()];
for(int i=0;i<arr.length;i++)
arr[i]=1;
for(int i=1;i<list.size();i++)
{
for(int j=0;j<i;j++)
{
if(list.get(i)>list.get(j) && ((arr[j]+1)>arr[i]))
{
arr[i]=arr[j]+1;
}
}
}
long max=arr[0];
int maxindex=0;
for(int i=0;i<arr.length;i++)
{
if(arr[i]>max)
{max=arr[i];maxindex=i;}
}
long newarr[]=new long[(int)max];
long min=list.get(maxindex);
int minindex=maxindex;
int k=newarr.length-1;
newarr[k]=min;
for(int i=maxindex-1;i>=0;i--)
{
if(min>list.get(i) && arr[i]+1==arr[minindex] && --k>=0)
{
min=list.get(i);
minindex=i;
newarr[k]=min;
}
}
System.out.println("The length of longest increasing common subsequence is :"+ max);
for(int i=0;i<newarr.length;i++)
System.out.print(newarr[i]+" ");
}
}