【LeetCode】最长和谐子序列 Java 题解
题目描述
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。
现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
复制代码
思路分析
今天的算法每日一题是求最长和谐子序列题目,一看到子序列就容易联想到 DP 解决思路,但是这个题目却不需要 DP。仔细阅读分析题目**和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 **。这个条件,差值是 1,限制了元素必须相邻。我们采用 hashmap 存储结构,遍历数组,记录每一个元素出现的次数,然后通过 hashmap 求相邻的元素出现的次数,两者的和即位子序列的长度,具体实现代码如下:
通过代码
复制代码
总结
hash 解法的时间复杂度是 O(n),空间复杂度是 O(n)
学习算法,写算法题目,还是需要结合实际题目描述,认真分析,才能得到正确的解决方法。
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/97d384b4365c8ad2b86ae9768】。文章转载请联系作者。
评论