当前位置: 首页 > news >正文

买拆车件上什么网站工装设计网站推荐

买拆车件上什么网站,工装设计网站推荐,可以全部免费观看的软件,毛戈平化妆培训学校官网题目 300. 最长递增子序列 中等 相关标签 数组 二分查找 动态规划 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例…

题目

300. 最长递增子序列

中等

相关标签

数组   二分查找   动态规划

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

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例 1:

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

示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4

示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1

提示:

  • 1 <= nums.length <= 2500
  • -104 <= nums[i] <= 104

进阶:

  • 你能将算法的时间复杂度降低到 O(n log(n)) 吗?

思路和解题方法

  • if(nums.size()<=1) return nums.size();:特判,如果数组nums长度为0或1,直接返回其长度。
  • vector<int> dp(nums.size(), 1);:创建一个大小为nums长度的数组dp,用于存储以nums[i]结尾的最长上升子序列的长度。初始值全部赋为1,因为每个元素本身也可以构成一个长度为1的上升子序列。
  • int ans = 0;:初始化最长上升子序列的长度为0。
  • for(int i = 1; i < nums.size(); i++):从第二个元素开始遍历数组nums
  • for(int j = 0; j < i; j++):在i之前的元素中,找到比nums[i]小的元素。
  • if(nums[i] > nums[j]):如果nums[i]大于nums[j],则可以将nums[i]加入到以nums[j]结尾的最长上升子序列中。
  • dp[i] = max(dp[i], dp[j] + 1);:更新以nums[i]结尾的最长上升子序列的长度。当前位置的值为前面比它小的元素中以每个元素结尾的最长上升子序列长度的最大值+1。
  • if(ans < dp[i]) ans = dp[i];:更新最长上升子序列的长度。
  • return ans;:返回最长上升子序列的长度。

复杂度

        时间复杂度:

                O(n*n)

时间复杂度分析: 代码中使用了两重循环,时间复杂度为O(n^2)。

其中,内层循环每次迭代都会执行常数个操作(比较和更新dp数组),因此时间复杂度为O(1)。

外层循环的迭代次数为n-1,因此时间复杂度为O(n)。

因此,算法的总时间复杂度为O(n^2)。

        空间复杂度

                O(n)

空间复杂度分析: 代码中使用了一个长度为n的dp数组,因此空间复杂度为O(n)。

c++ 代码

class Solution {
public:int lengthOfLIS(vector<int>& nums) {if(nums.size()<=1) return nums.size();vector<int> dp(nums.size(), 1); // 创建一个dp数组,用于存储以nums[i]结尾的最长上升子序列的长度,默认初始为1int ans = 0; // 初始化最长上升子序列的长度为0for(int i = 1; i < nums.size(); i++) // 遍历数组nums{for(int j = 0; j < i; j++) // 在i之前的元素中,找到比nums[i]小的元素{if(nums[i] > nums[j]) // 如果nums[i]大于nums[j],则可以将nums[i]加入到以nums[j]结尾的最长上升子序列中dp[i] = max(dp[i], dp[j] + 1); // 更新以nums[i]结尾的最长上升子序列的长度}if(ans < dp[i]) // 更新最长上升子序列的长度ans = dp[i];}return ans; // 返回最长上升子序列的长度}
};

Java代码

class Solution {public int lengthOfLIS(int[] nums) {int[] dp = new int[nums.length]; // 创建一个大小为nums.length的数组dp,用于存储以nums[i]结尾的最长上升子序列的长度,默认初始为1int res = 0; // 初始化最长上升子序列的长度为0Arrays.fill(dp, 1); // 将dp数组中的元素全部赋值为1for (int i = 1; i < dp.length; i++) { // 遍历数组nums,从第二个元素开始for (int j = 0; j < i; j++) { // 在i之前的元素中,找到比nums[i]小的元素if (nums[i] > nums[j]) { // 如果nums[i]大于nums[j],则可以将nums[i]加入到以nums[j]结尾的最长上升子序列中dp[i] = Math.max(dp[i], dp[j] + 1); // 更新以nums[i]结尾的最长上升子序列的长度}res = Math.max(res, dp[i]); // 更新最长上升子序列的长度}}return res; // 返回最长上升子序列的长度}
}

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

http://www.sczhlp.com/news/96945/

相关文章:

  • 罗湖网站建设的公司商城网站商家入驻功能
  • 建网站找兴田德润网页设计入门首先要学什么
  • 西安外贸网站搭建wordpress更改登录页面
  • 网站建设前期策划手机百度一下
  • 互联网公司怎么找网站建设客户恒信在线做彩票的是什么样的网站
  • 用nodejs做的网站做电销要在哪个网站上找资源
  • 中大型水闸安全监测的重要性及实施方法 - 指南
  • 如何通过LangChain实现记忆功能的总结
  • python 轻量级别的网页包Streamlit
  • 网站asp代码asp.net如何设置网站的图标
  • 海口的网站建设公司手机网站制作报价
  • 工作简历模板电子版外贸网站如何推广优化
  • 盘锦市建设局网站地址建立健全()和安全生产规章制度
  • 建设个人网站的要求专业郑州做网站
  • 个人怎么创建网站绍兴网站建设公司地址
  • 仿牌外贸网站建设c2c网站的建设
  • 网站开发价格对比seo查询平台
  • 青海省高等级公路建设管理局网站wordpress单页下载插件
  • 企业网站源码 vue附近哪里需要招人
  • 网站建设平台分析广东东莞最近出什么事了
  • 网站建设南京网站建设教程 mysql
  • 做h5动画的素材网站腾讯营销平台
  • 深圳福田网站设计上海市网站建设加盟
  • 厦门网站建设开发公司摄影作品集
  • 网站空间到期了怎么办app制作成本
  • 网站模板免费下载云资源做项目的招聘网站
  • wpf-MVVM+IOC/ID
  • IT科技资讯新闻类织梦网站模板漯河小学网站建设
  • 济南建设工程信息网站武昌专业的网络推广团队
  • 四川微信网站建设公用rp怎么做网站按钮下拉框