前端算法-最长的递增子序列

简介: 前端算法-最长的递增子序列

题目

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

输入: nums = [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长递增子序列是 [2,3,7,101],因此长度为 4 。

思路一

这里题目要求是最长的递增数列的长度, 所以我们需要对每一个位置的最大长度进行统计,首先我们先声明一个dp变量,他是一个和形参nums同样长度的数组,默认每一位数都为1,然后我们使用循环,在循环中我们在套一层循环,在第二层循环中我们进行判断,如果形参nums数组j变量位置的数小于形参nums数组i变量的数,则使用Math.max方法在dp数组的i变量位置的数和dp数组的j变量位置的数自增1后取一个最大值,然后存在dp数组中i变量位置中,然后用Math.max方法将dp数组中的最大数查找出来并返回出去

var lengthOfLIS = function(nums) {
    let dp = new Array(nums.length).fill(1)
    for(let i=1;i<nums.length;i++) {
        for(let j=0;j<i;j++) {
            if(nums[j] < nums[i]) {
                dp[i] = Math.max(dp[i], dp[j] + 1)
            }
        }
    }
    return Math.max(...dp)
};

思路二

我们先声明一个n变量用于存储形参nums的数据长度,然后判断n变量是否小于等于1,如果是则直接返回出去,如果不是我们声明一个tail数组,用于存放最长上升子序列,然后在使用循环,在循环中判断当前形参nums的某一项元素是否比tail数组中的最后一个大,如果是则使用push将形参nums的当前某项添加到tail数组中,如果不是则进行二分查找,最后将形参nums的数的当前项放到tail合适的位置中,让后面的数字与当前的数字形成上升子序列,最后把tail数据长度返回出去即可

var lengthOfLIS = function(nums) {
let n = nums.length;
    if (n <= 1) {
        return n;
    }
    let tail = [nums[0]];
    for (let i = 0; i < n; i++) {
        if (nums[i] > tail[tail.length - 1]) {
            tail.push(nums[i]);
        } else {
            let left = 0;
            let right = tail.length - 1;
            while (left < right) {
                let mid = (left + right) >> 1;
                if (tail[mid] < nums[i]) {
                    left = mid + 1;
                } else {
                    right = mid;
                }
            }
            tail[left] = nums[i];
        }
    }
    return tail.length;
};


相关文章
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
156 1
|
1月前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
22 0
|
2月前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
6月前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
41 1
|
6月前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
3月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
266 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
2月前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。
|
3月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
73 1
|
3月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
5月前
|
前端开发 算法 JavaScript
优化算法在前端性能提升中的应用
随着互联网应用的日益复杂,前端性能优化成为开发者关注的焦点。本文探讨了优化算法在前端性能提升中的重要作用,包括对JavaScript代码的优化、资源加载的算法选择以及页面渲染的优化策略。通过合理应用优化算法,可以有效提升前端应用的性能和用户体验。
下一篇
无影云桌面