300. Longest Increasing Subsequence

Posted on May 22, 2025

Solution

  • 參考 Longest Increasing Subsequence - Neetcode
  • 用 dp[i] 陣列紀錄 i 到 n-1 的 LIS 是多少,每次把 i + 1 ~ n-1 跑過一遍看把 nums[i] 算進去之後的 LIS 誰最大,跑完之後再把 i— 後再重新做一樣的事。最後 dp 裡面最大的數字就是解答。
  • Time: O(n^2), Space: O(n)

Implementation

class Solution {
    fun lengthOfLIS(nums: IntArray): Int {
        val dp = IntArray(nums.size) { 1 }
        var i = nums.size

        while (--i >= 0) {
            for (j in i + 1 until nums.size) {
                if (nums[j] > nums[i]) dp[i] = max(dp[i], 1 + dp[j])
            }
        }

        return dp.max()
    }
}