Dynamic programming | Tabulation
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\nclass Solution {\npublic:\n    int maxNonDecreasingLength(vector<int>& nums1, vector<int>& nums2) {\n        vector<vector<int>>dp(nums1.size(),vector<int>(2,0));\n        dp[0][0]=1;\n        dp[0][1]=1;\n        for(int i=1;i<nums1.size();i++){\n            for(int j=0;j<2;j++){\n                if(j==0){\n                    if(nums1[i]>=nums1[i-1] && nums1[i]>=nums2[i-1])dp[i][0]=max(1+dp[i-1][0],1+dp[i-1][1]);\n                    else if(nums1[i]>=nums1[i-1] && nums1[i]<nums2[i-1])dp[i][0]=1+dp[i-1][0];\n                    else if(nums1[i]<nums1[i-1] && nums1[i]>=nums2[i-1])dp[i][0]=1+dp[i-1][1];\n                    else if(nums1[i]<nums1[i-1] && nums1[i]<nums2[i-1])dp[i][0]=1;\n                }\n                else if(j==1){\n                    if(nums2[i]>=nums1[i-1] && nums2[i]>=nums2[i-1])dp[i][1]=max(1+dp[i-1][0],1+dp[i-1][1]);\n                    else if(nums2[i]>=nums1[i-1] && nums2[i]<nums2[i-1])dp[i][1]=1+dp[i-1][0];\n                    else if(nums2[i]<nums1[i-1] && nums2[i]>=nums2[i-1])dp[i][1]=1+dp[i-1][1];\n                    else if(nums2[i]<nums1[i-1] && nums2[i]<nums2[i-1])dp[i][1]=1;\n                }\n            }\n        }\n        int ans=0;\n        for(int i=0;i<nums1.size();i++){\n            for(int j=0;j<2;j++){\n                ans=max(ans,dp[i][j]);\n            }\n        }\n        return ans;\n    }\n};\n```
['Array', 'Dynamic Programming', 'C++']