(M)Dynamic Programming:673. Number of Longest Increasing Subsequence
来源:互联网 发布:b2b源码授权费用 编辑:程序博客网 时间:2024/06/05 17:34
这个题并不难,但是我一开始递归关系找错了。这个题考虑建立两个dp数组,一个存最长递增数组的长度,另一个存这个长度有多少条。下面是参考讨论区解法之后我的AC的代码:
class Solution {public: int findNumberOfLIS(vector<int>& nums) { int n = nums.size(); if(n == 0) return 0; vector<int> longest(n, 1); vector<int> count(n, 1); int length = 1; int res = 0; for(int i = 1; i < n; ++i) { for(int j = i - 1; j >= 0; --j) { if(nums[i] > nums[j]) { if(longest[i] < longest[j] + 1) { longest[i] = longest[j] + 1; count[i] = count[j]; //不是count[i] += 1;! } else if(longest[i] == longest[j] + 1) { count[i] += count[j]; // 不是count[i] = count[j];! } } } length = max(length, longest[i]); } for (int i = 0; i < n; i++) if (longest[i] == length) res += count[i]; return res; }};
下面是讨论区代码:
int findNumberOfLIS(vector<int>& nums) { int n = nums.size(), res = 0, max_len = 0; vector<pair<int,int>> dp(n,{1,1}); //dp[i]: {length, number of LIS which ends with nums[i]} for(int i = 0; i<n; i++){ for(int j = 0; j <i ; j++){ if(nums[i] > nums[j]){ if(dp[i].first == dp[j].first + 1)dp[i].second += dp[j].second; if(dp[i].first < dp[j].first + 1)dp[i] = {dp[j].first + 1, dp[j].second}; } } if(max_len == dp[i].first)res += dp[i].second; if(max_len < dp[i].first){ max_len = dp[i].first; res = dp[i].second; } } return res; }
阅读全文
0 0
- (M)Dynamic Programming:673. Number of Longest Increasing Subsequence
- (M)Dynamic Programming:300. Longest Increasing Subsequence
- 673. Number of Longest Increasing Subsequence
- leetcode 673. Number of Longest Increasing Subsequence
- [LeetCode] 673. Number of Longest Increasing Subsequence
- LeetCode 673.Number of Longest Increasing Subsequence
- 673. Number of Longest Increasing Subsequence
- 673. Number of Longest Increasing Subsequence
- 673. Number of Longest Increasing Subsequence
- 673. Number of Longest Increasing Subsequence
- 673. Number of Longest Increasing Subsequence
- Number of Longest Increasing Subsequence
- Dynamic Programming 之 Longest Increasing Subsequence 问题
- (M)Dynamic Programming:516. Longest Palindromic Subsequence
- LWC 49:673. Number of Longest Increasing Subsequence
- 673. Number of Longest Increasing Subsequence【Medium】 一维动归
- 【第十一周】673. Number of Longest Increasing Subsequence
- leetcode 673. Number of Longest Increasing Subsequence 动态规划DP
- 二维码扫描
- 会话跟踪的多种方法
- 游戏小透明与Construct 2的初次邂逅
- 中缀表达式转为后缀表达式
- Rust: codewars的Molecule to atoms
- (M)Dynamic Programming:673. Number of Longest Increasing Subsequence
- 高通Qualcomm平台lk(light kernel)启动流程3——到高通lcm屏点亮
- 自定义view箭头绕圆环旋转
- 文章标题
- kotlin实现一个简单的新闻客户端-01
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- Java Activiti(1)---基础流程
- Python 之 基础面向对象编程
- 7-1 银行业务队列简单模拟