动态规划的方式计算最长递增子序列
思路解析
- 首先遍历给定的数字集合,然后遍历生成一个value为1的一个对象集合,title存储的是num的数值
- 遍历从数组下标为1的位置,分别和他前面的对象中title做比较,如果比此数字小,则取该元素的value+1和当前对象的value做比较,取最大者替换到当前元素的value
- 然后下标向后移动一位,再重复上一步的操作,直到集合中的最后一位
- 在外层定义一个resultNum,默认为1,每次要为第二步中的value赋值的时候,就和resultNum比较,取最大者记录,最后返回。
代码实现
function lengthOfLIS(nums: number[]): number {
interface IChid {
title: number
value: number
}
let tempArr: IChid[] = []
let resultNum = 1
nums.forEach(item => {
tempArr.push({
title: item,
value: 1
})
})
for(let i = 1; i < tempArr.length; i++){
let outItem = tempArr[i]
// console.log('out----' + outItem.title)
for(let j = 0; j < i; j++){
let inItem = tempArr[j]
// console.log('in--' + inItem.title)
if(inItem.title < outItem.title){
let tempValue = inItem.value + 1
outItem.value = Math.max(tempValue, outItem.value)
resultNum = Math.max(resultNum, outItem.value)
}
}
}
return resultNum
};
可以参考网址动态展示算法的过程:alchemist-al.com/algorithms/…