美文网首页
594. 最长和谐子序列

594. 最长和谐子序列

作者: 吃饭用盘装 | 来源:发表于2018-06-05 23:31 被阅读95次

内容

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

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

示例 1:

输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
说明: 输入的数组长度最大不超过20,000.


思路

既然子序列中最大值和最小值差别为1,那么就是说,这两个元素处于排序后数组中的相邻位置,所以这里先对数组排序。
然后将这些元素出现的次数存储起来用对象表示。
最后依次统计相邻元素里出现次数最多的值,也就是最大子序列的长度。


代码

/**
最长和谐子序列

思路,既然子序列中最大值和最小值差别为1,那么就是说,这两个元素处于排序后数组中的相邻位置,所以这里先对数组排序。
然后将这些元素出现的次数存储起来用对象表示。
最后依次统计相邻元素里出现次数最多的值,也就是最大子序列的长度。
 * @param {number[]} nums
 * @return {number}
 */
var findLHS = function (nums) {
    var map = {};

    nums.sort(function (a, b) {
        return a - b;
    })

    nums.forEach(function (item) {
        if (map[item] == null) {
            map[item] = 1;
        } else {
            map[item] += 1;
        }
    })

    var keys = Object.keys(map);
    var maxLength = 0;
    for (var i = 0; i < keys.length; i++) {
        var nowKey = keys[i];
        var nextKey = keys[i + 1];
        var nowVal = map[nowKey];
        var nextVal = map[nextKey];

        if (Math.abs(nextKey - nowKey) == 1 && nowVal + nextVal > maxLength) {
            maxLength = nowVal + nextVal;
        }
    }

    return maxLength;
};

回到目录

相关文章

  • 594. 最长和谐子序列

    内容 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。 现在,给定一个整数数组,你需要在所有可能的子...

  • 最长和谐子序列

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longes...

  • 公共子序列问题

    最长公共子序列 最长上升子序列 最长公共上升子序列

  • 算法(04)动态规划

    零钱问题 背包问题 最长公共子序列 最长公共子串 最长上升子序列 最大连续子序列和

  • 子序列问题

    最长公共子序列 最长上升/下降/不升/不降子序列

  • 最长公共子序列和最长公共子串

    最长公共子序列和最长公共子串区别 最长公共子串(Longest CommonSubstring)和最长公共子序列(...

  • LintCode 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子序列问...

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明最长上升子序列的定义:最长上升子序列...

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问...

  • 最长上升子序列

    最长上升子序列(Longest Increasing Subsequence) 最长上升子序列方案数

网友评论

      本文标题:594. 最长和谐子序列

      本文链接:https://www.haomeiwen.com/subject/fglvsftx.html