见vue3-runtime-core

    1. let arr = [4,2,3,1,5];
    2. console.log(LengthOfLIS(arr));
    3. console.log(IndexOfLIS(arr));
    4. console.log(NumOfLIS(arr));
    5. function LengthOfLIS(num){
    6. let len = num.length;
    7. const dp = new Array(len).fill(1);
    8. if (len<=1){
    9. return len;
    10. }
    11. let max = 1;
    12. for (let i = 1;i<len;i++){
    13. for (let j = 0;j<i;j++){
    14. if(num[i]>num[j]){
    15. dp[i] = Math.max(dp[i],dp[j]+1);
    16. }
    17. }
    18. max = Math.max(max,dp[i]);
    19. }
    20. return max;
    21. }
    22. function IndexOfLIS(num){
    23. let len = num.length;
    24. let max = [num[0]];
    25. const dp = new Array(len).fill(1).map((v,i)=>[[i]]);
    26. for (let i = 1;i<len;i++){
    27. for (let j = 0;j<i;j++){
    28. if(num[i]>num[j]){
    29. for (let k = 0;k<dp[j].length;k++){
    30. let target = [...dp[j][k],i];
    31. dp[i].push(target);
    32. if(target.length>max.length){
    33. max = [...target];
    34. }
    35. }
    36. }
    37. }
    38. }
    39. return max;
    40. }
    41. function NumOfLIS(num){
    42. let len = num.length;
    43. let max = [num[0]];
    44. const dp = new Array(len).fill(1).map((v,i)=>[[num[i]]]);
    45. for (let i = 1;i<len;i++){
    46. for (let j = 0;j<i;j++){
    47. if(num[i]>num[j]){
    48. for (let k = 0;k<dp[j].length;k++){
    49. let target = [...dp[j][k],num[i]];
    50. dp[i].push(target);
    51. if(target.length>max.length){
    52. max = [...target];
    53. }
    54. }
    55. }
    56. }
    57. }
    58. return max;
    59. }