iT邦幫忙

2024 iThome 鐵人賽

0
佛心分享-刷題不只是刷題

刷經典 LeetCode 題目系列 第 36

經典LeetCode 300. Longest Increasing Subsequence

  • 分享至 

  • xImage
  •  

題目:
給定一個整數陣列 nums,找出其中最長嚴格遞增子序列的長度。

  • 子序列是指從陣列中刪除一些元素後(或不刪除任何元素)剩下的元素,它們的相對順序保持不變。
  • 嚴格遞增指的是,每個元素都比前一個元素大。

範例:

Input: nums = [10,9,2,5,3,7,101,18]
Output: 4
Explanation: 最長的嚴格遞增子序列是 [2,3,7,101],因此長度為 4。
Input: nums = [0,1,0,3,2,3]
Output: 4
Input: nums = [7,7,7,7,7,7,7]
Output: 1

限制條件

  • 1 <= nums.length <= 2500
  • -10^4 <= nums[i] <= 10^4

實作:

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        if (nums.empty()) return 0;

        int n = nums.size();
        vector<int> dp(n, 1);  // 每個位置最長子序列長度初始化為1
        int maxLength = 1;

        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) {
                    dp[i] = max(dp[i], dp[j] + 1);
                }
            }
            maxLength = max(maxLength, dp[i]);
        }

        return maxLength;
    }
};

參考:
#300. Longest Increasing Subsequence


上一篇
經典LeetCode 39. Combination Sum
系列文
刷經典 LeetCode 題目36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言