300最長遞增子序列
class Solution {
public:int lengthOfLIS(vector<int>& nums) {int piles = 0; // 牌堆數初始化為 0vector<int> top(nums.size()); // 牌堆數組 topfor (int i = 0; i < nums.size(); i++) {int poker = nums[i]; int left = 0, right = piles; while (left < right) {int mid = (left + right) / 2; if (top[mid] < poker) {left = mid + 1;} else {right = mid;}}if (left == piles) piles++;top[left] = poker;}// 牌堆數就是 LIS 長度return piles;}
};
674最長連續遞增子序列
class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int result=0;if(nums.size()<=1) return nums.size();vector<int>dp(nums.size(),1);for(int i=1;i<nums.size();i++){if(nums[i]>nums[i-1]) dp[i]=max(dp[i],dp[i-1]+1);result=dp[i]>result?dp[i]:result;}return result;}
};
718最長重復子數組
class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp (nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for(int i=1;i<=nums1.size();i++){for(int j=1;j<=nums2.size();j++){if(nums1[i-1]==nums2[j-1]){dp[i][j]=dp[i-1][j-1]+1;if (dp[i][j] > result) result = dp[i][j];}}}return result;}
};