LeetCode-674. Longest Continuous Increasing Subsequence

来源:互联网 发布:网络诽谤案例分析 编辑:程序博客网 时间:2024/05/01 00:27

Description:

这里写图片描述

Example 1:

这里写图片描述

Example 2:

这里写图片描述

Note:

这里写图片描述

Solution1 (C++):

这里写图片描述

Solution2 (C++):

这里写图片描述

Solution3 (C++):

这里写图片描述

算法分析:

解法一:我采用了动态规划的方法,通过迭代来解决这道题。很显然,解法一中存在许多重复计算,而且,就单说这道题目,完全没有必要这么做。其实还有更加简便的方法。
解法二:这个解法相比解法一舍弃了一些这道题中不需要考虑的问题。比如说只关注最大值max为多少,并不用关心是在哪个元素取到的。此外还需要强调一点的就是对于多种判断条件的整合。在解法一我是将各种条件分的很开,虽然在写程序的时候可以按照思路一步步写,但实际最终的代码结果过于复杂。而通过我们进一步的思考,可以发现i=0与nums[i]<=nums[i-1]的情况是一样的:递增连续数列都会中断。所以,直接让len=0.然后len++表示当前元素所在的递增连续数列的长度。并于max比较,取最大值即可解题。
解法三:这个解法也比较常用,双指针法。设定两个指针i与j。i刚开始等于0,j也是,但是j会不断加1,相当于i刚开始在数列最开始定住,j不断向后移动。当j遍历的元素都是递增,那么就让len保持+1.并且不断与max比较,将较大者作为新的max。如果不是,即j=0或者,j出现了递减元素。那么就让i=j。j继续向后移动,但这时候len=0.此外,这个程序中巧妙的一点就是,利用j-i+1来作为len的值。确实。这还是整合了。使得程序变得紧凑巧妙。

程序分析:

说一个bug。在我的解法一中。子函数传递参数时,子函数形参设定的是int& i.然后在实现中调用子函数需要重新传入i-1。我刚开始写的是curlengthCIS(nums,.len,i-1)。这样报错了。因为传入的是i-1.与形参格式不符合。应该int m=i-1.然后传入m即可。

阅读全文
0 0
原创粉丝点击