本文共 1052 字,大约阅读时间需要 3 分钟。
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
持续分享下去,敬请您的关注。
LeetCode 674. 最长的连续增加子序列(Longest Continuous Increasing Subsequence)
给定未排序的整数数组,找到最长连续增加子序列的长度。
注:
数组的长度不超过10,000。
我测试了一些,所谓的"连续增加子序列"就是指:从数组的某一个元素开始的一段连续的元素的值是单调增加的。比如"1,2,3,4"是连续增加子序列,而"1,2,2,3"和"4,3,2,1"都不是。
我们用一个很传统的方法。
首先定义两个整型变量res和tmp,res存放最终的结果,tmp存放临时连续子序列长度。
开始遍历数组:
遍历结束后,再次比较res和tmp的值,返回最大的那一个。
代码如下:
我们对这个算法做了一点点的优化,请看代码第12行,当当前元素是一个新连续增加子序列的开始元素时,如果res+i大于等于数组的长度,那么这时候即使后面的元素全部都是连续子序列,其长度也不可能超过res,所以可以直接返回res。这样可以跳过对后面一部分元素的遍历。
Java 的实现和C语言的实现一致,不再撰述。代码如下:
Python 的实现和C语言的实现一致,不再撰述。代码如下:
谢谢大家一直以来的关注和支持!
我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后只回答粉丝的问题和私信。希望仅仅是路过的朋友能够体谅,希望更多人关注《吾是我师》,谢谢!
转载地址:http://mgqhp.baihongyu.com/