专栏名称: 吴师兄学算法
和程序员小吴一起从初学者的角度学习算法,以动画的形式呈现解题的思路。每周四篇原创文章,期待你的鉴赏!
今天看啥  ›  专栏  ›  吴师兄学算法

拼多多一面,好难。。。

吴师兄学算法  · 公众号  ·  · 2024-08-02 21:00
    

文章预览

大家好,我是吴师兄。 来 看一道 砍一刀 拼多多的算法题。 手撕最长递减子序列,实际上就是稍微修改一下最长递增子序列的代码即可。 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。 定义状态 : dp[i] 表示以 nums[i] 结尾的最长递增子序列的长度。 状态转移 : 对于每个元素 nums[i] ,从头开始遍历到 i-1 ,如果 nums[i] 大于 nums[j] (即 nums[i] 可以接在 nums[j] 后面形成一个更长的递增子序列),则更新 dp[i] : dp[i] = max(dp[i], dp[j] + 1) 。 初始化 : dp 数组的每个元素初始化为1,因为每个元素本身可以构成一个长度为1的递增子序列。 结果 : 遍历 dp 数组,找出最大的值即为最长递增子序列的长度。 代码如下: class   Solution :      def   lengthOfLIS ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览