声明:只求用最简单的方法通过,不求优化,不喜勿喷
1.用dp来做,感觉是我想复杂了
2.先用一个数组来记录某个元素的最长子列长度,用另一个数组来记录某个元素的最长子列个数
3.遍历整个数组,,每次找某个元素之前所有的元素,找到比当前元素小的元素中,子列数量最大的,记下最长长度
4.找到比当前元素小的元素中,子列数量和最大值一样的,将他们的子列数量累加起来,设置为当前的子列数量
5.用maxl记录整体最长的子列长度
6,最后完成遍历后,累加所有子列长度等于最长长度的子列数量即可
7.优化todo
/**
* @param {number[]} nums
* @return {number}
*/
var findNumberOfLIS = function (nums) {
let maxl = 1;
let re = 0;
let dp = [1];
let cnt = new Array(nums.length + 1).fill(0);
cnt[0] = 1;
for (var i = 1; i < nums.length; i++) {
let max = 0;
for (var j = 0; j < i; j++) {
if (dp[j] > max && nums[i] > nums[j]) {
max = dp[j]
}
}
if(max == 0){
cnt[i] = 1;
}
for (var j = 0; j < i; j++) {
if (dp[j] == max && nums[i] > nums[j]) {
cnt[i] += cnt[j];
}
}
dp[i] = max + 1;
if (dp[i] > maxl) {
maxl = dp[i];
}
}
for (var i = 0; i < nums.length; i++) {
if (dp[i] == maxl) {
re += cnt[i]
}
}
return re;
};