[−][src]Function leetcode_for_rust::cd0300_longest_increasing_subsequence::length_of_lis
pub fn length_of_lis(nums: Vec<i32>) -> i32
Solutions
Approach 1: Dynamic Programming
-
Time complexity: O(nlogn)
-
Space complexity: O(n)
-
Runtime: 0 ms
-
Memory: 2.5 MB
impl Solution { pub fn length_of_lis(nums: Vec<i32>) -> i32 { if nums.len() <= 1 { return nums.len() as i32; } let mut lis = vec![]; lis.push(nums[0]); for i in 1..nums.len() { match lis.binary_search(&nums[i]) { Ok(n) => (), Err(n) => { if n >= lis.len() { lis.push(nums[i]); } else { lis[n] = nums[i]; } }, } } lis.len() as i32 } }
Approach 2: Dynamic Programming
-
Time complexity: O(n2)
-
Space complexity: O(n)
-
Runtime: 12 ms
-
Memory: 2.5 MB
use std::cmp::max; impl Solution { pub fn length_of_lis(nums: Vec<i32>) -> i32 { if nums.len() <= 1 { return nums.len() as i32; } let mut dp = vec![1; nums.len()]; let mut max_lis = 1; for i in 1..nums.len() { let mut tmp_max = 0; for j in 0..i { if nums[i] > nums[j] { tmp_max = max(tmp_max, dp[j]); } dp[i] = tmp_max + 1; } max_lis = max(max_lis, dp[i]); } max_lis } }
Approach 3: Dynamic Programming
-
Time complexity: O(n2)
-
Space complexity: O(n)
-
Runtime: 8 ms
-
Memory: 2.5 MB
use std::cmp::max; impl Solution { pub fn length_of_lis(nums: Vec<i32>) -> i32 { if nums.len() <= 1 { return nums.len() as i32; } let mut dp = vec![1; nums.len()]; let mut max_lis = 1; for i in 1..nums.len() { for j in 0..i { if nums[i] > nums[j] { dp[i] = max(dp[i], dp[j] + 1); } } max_lis = max(max_lis, dp[i]); } max_lis } }