Skip to content

Commit f569a4e

Browse files
Sean PrashadSean Prashad
authored andcommitted
Update 300_Longest_Increasing_Subsequence.java
1 parent f3f9204 commit f569a4e

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed
Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,33 @@
11
class Solution {
22
public int lengthOfLIS(int[] nums) {
3-
if (nums == null || nums.length == 0) {
4-
return 0;
3+
int[] dp = new int[nums.length];
4+
int len = 0;
5+
6+
for (int num : nums) {
7+
int idx = binarySearch(dp, 0, len, num);
8+
dp[idx] = num;
9+
10+
if (idx == len) {
11+
++len;
12+
}
513
}
614

7-
int[] dp = new int[nums.length];
8-
Arrays.fill(dp, 1);
9-
int max = 1;
15+
return len;
16+
}
17+
18+
private int binarySearch(int[] nums, int low, int high, int target) {
19+
while (low < high) {
20+
int mid = low + (high - low) / 2;
1021

11-
for (int currNum = 0; currNum < nums.length; currNum++) {
12-
for (int prevNum = 0; prevNum < currNum; prevNum++) {
13-
if (nums[currNum] > nums[prevNum]) {
14-
dp[currNum] = Math.max(dp[currNum], dp[prevNum] + 1);
15-
}
22+
if (nums[mid] == target) {
23+
return mid;
24+
} else if (nums[mid] < target) {
25+
low = mid + 1;
26+
} else {
27+
high = mid;
1628
}
17-
max = Math.max(max, dp[currNum]);
1829
}
1930

20-
return max;
31+
return low;
2132
}
2233
}

0 commit comments

Comments
 (0)