300.最长递增子序列——暴力递归(O(n^3)),动态规划(O(n^2)),动态规划+二分法(O(nlogn))
算法新手,刷力扣遇到这题,搞了半天终于搞懂了,来这记录一下,欢迎大家交流指点。
题目描述:
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
解法一:暴力递归
不解释,先暴力搞一下。(时间复杂度O(n^3),不行)
1 class Solution { 2 public: 3 int l(vector<int>& nums) { // 返回以nums[0]开头的最长递增序列长度 4 if (nums.size() < 2) 5 return nums.size(); 6 int max_len = 1; 7 for (int i = 1; i < nums.size(); ++ i) 8 if (nums[i] > nums[0]) { 9 vector<int> t{nums.begin() + i, nums.end()}; 10 max_len = max(max_len, l(t) + 1); 11 } 12 return max_len; 13 } 14 int lengthOfLIS(vector<int>& nums) { // 所有序列遍历一遍 15 int max_len = 1; 16 for (i = 0; i < nums.size(); ++ i) { 17 vector<int> t(nums.begin() + i, nums.end()); 18 max_len = max(max_len, l(t)); 19 } 20 return max_len; 21 } 22 };
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 300.最长递增子序列——暴力递归(O(n^3)),动态规划(O(n^2)),动态规划+二分法(O(nlogn))
自学咖网 » 300.最长递增子序列——暴力递归(O(n^3)),动态规划(O(n^2)),动态规划+二分法(O(nlogn))