和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。

现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。

数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。

示例

示例 1:

输入:nums = [1,3,2,2,5,2,3,7]
输出:5
解释:最长的和谐子序列是 [3,2,2,2,3]

示例 2:

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

示例 3:

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

题解

遍历 nums 保存数据 map

再遍历 map 查找是否有 key + 1 的值,算出最大值

  1. /**
  2. * @param {number[]} nums
  3. * @return {number}
  4. */
  5. var findLHS = function(nums) {
  6. const map = {}
  7. let res = 0
  8. for (let i = 0; i < nums.length; i++) {
  9. if (!map[nums[i]]) {
  10. map[nums[i]] = 0
  11. }
  12. map[nums[i]]++
  13. }
  14. Object.keys(map).forEach(item => {
  15. if (map[Number(item) + 1]) {
  16. res = Math.max(res, map[item] + map[Number(item) + 1])
  17. }
  18. })
  19. return res
  20. };

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-harmonious-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。