Skip to content

Commit 9fd57c7

Browse files
Merge pull request TheAlgorithms#109 from icalF/master
Add longest increasing subsequence
2 parents 0aee19d + dc8114c commit 9fd57c7

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.util.Scanner;
2+
3+
/**
4+
*
5+
* @author Afrizal Fikri (https://github.com/icalF)
6+
*
7+
*/
8+
public class LongestIncreasingSubsequence {
9+
public static void main(String[] args) throws Exception {
10+
11+
Scanner sc = new Scanner(System.in);
12+
int n = sc.nextInt();
13+
14+
int ar[] = new int[n];
15+
for (int i = 0; i < n; i++) {
16+
ar[i] = sc.nextInt();
17+
}
18+
19+
System.out.println(LIS(ar));
20+
}
21+
22+
private static int upperBound(int[] ar, int l, int r, int key) {
23+
while (l < r-1) {
24+
int m = (l + r) / 2;
25+
if (ar[m] >= key)
26+
r = m;
27+
else
28+
l = m;
29+
}
30+
31+
return r;
32+
}
33+
34+
public static int LIS(int[] array) {
35+
int N = array.length;
36+
if (N == 0)
37+
return 0;
38+
39+
int[] tail = new int[N];
40+
int length = 1; // always points empty slot in tail
41+
42+
tail[0] = array[0];
43+
for (int i = 1; i < N; i++) {
44+
45+
// new smallest value
46+
if (array[i] < tail[0])
47+
tail[0] = array[i];
48+
49+
// array[i] extends largest subsequence
50+
else if (array[i] > tail[length-1])
51+
tail[length++] = array[i];
52+
53+
// array[i] will become end candidate of an existing subsequence or
54+
// Throw away larger elements in all LIS, to make room for upcoming grater elements than array[i]
55+
// (and also, array[i] would have already appeared in one of LIS, identify the location and replace it)
56+
else
57+
tail[upperBound(tail, -1, length-1, array[i])] = array[i];
58+
}
59+
60+
return length;
61+
}
62+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy