## 300. Longest Increasing Subsequence
###### tags: `Dynamic Programming` `Medium`
>[300. Longest Increasing Subsequence](https://leetcode.com/problems/longest-increasing-subsequence/description/)
<br>
:::info
:::spoiler *Optimal Space & Time Complexity*
<br>
```
- Time complexity: O()
- Space complexity: O()
```
:::
<br>
## Thoughts & Solutions
### YC
:::spoiler Code
```javascript=
```
:::
<hr/>
### Sol
:::spoiler Code
```javascript=
```
:::
<hr/>
### 東
:::spoiler Code
```javascript=
// Time O(n^2) | Space O(n) - n is the length of nums
var lengthOfLIS = function(nums) {
const dp = new Array(nums.length).fill(1);
for (let start = nums.length - 2; start >= 0; start--) {
for (let second = start + 1; second < nums.length; second++) {
if (nums[start] < nums[second] && dp[start] < 1 + dp[second]) {
dp[start] = 1 + dp[second];
}
}
}
return Math.max(...dp);
};
```
:::
<hr/>
### Jessie
:::spoiler Code
```javascript=
```
:::
<hr/>
### Howard
:::spoiler Code
```python=
```
:::
<hr/>
### Haoyu
:::spoiler Code
#### Try 1: Dynamic Programming
```javascript=
var lengthOfLIS = function(nums) {
const dp = new Array(nums.length).fill(1);
for (let i = 0; i < nums.length; i += 1) {
for (let j = 0; j < i; j += 1) {
if (nums[i] > nums[j]) dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
return Math.max(...dp);
};
nums = [4,10,4,3,8,9] // 3
nums = [1,3,6,7,9,4,10,5,6] // 6
```
#### Try 2: Binary Search
```javascript=
var lengthOfLIS = function(nums) {
const helper = (array, target) => {
let [start, end] = [0, array.length - 1];
while (start < end) {
let mid = Math.floor((start + end) / 2);
if (array[mid] < target) start = mid + 1;
else end = mid;
}
return start;
};
const arr = new Array(nums.length).fill(Number.POSITIVE_INFINITY);
for (let i = 0; i < nums.length; i += 1) {
const j = helper(arr, nums[i]);
arr[j] = nums[i];
}
return arr.filter(v => v !== Number.POSITIVE_INFINITY).length;
};
```
:::
<hr/>
<br>
## Live Coding
:::spoiler (name)
```
// write your code here
```
:::