leetcode 算法题594 (简单151) 最长和谐子序列

leetcode 算法题594 (简单151) 最长和谐子序列

  • 题目介绍
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
现在,给定一个整数数组,
你需要在所有可能的子序列中找到最长的和谐子序列的长度。
  • 示例

输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].

  • 解法一
/**
 * @param {number[]} nums
 * @return {number}
 */
var findLHS = function(nums) {
  let map = {}, i = 0, max = 0;
  while(i < nums.length) {
    if(map[nums[i]]) {
      map[nums[i]]++;
    } else {
      map[nums[i]] = 1;
    }
    i++;
  }
  for(let key in map) {
    if(map[parseInt(key) + 1]) {
      max = Math.max(map[parseInt(key) + 1] + map[key], max);
    }
  }
  return max;
};

执行用时 : 144 ms, 在所有 JavaScript 提交中击败了91.75%的用户

内存消耗 : 46.4 MB, 在所有 JavaScript 提交中击败了10.81%的用户

  • 解法二
/**
 * @param {number[]} nums
 * @return {number}
 */
var findLHS = function(nums) {
  nums.sort((n1, n2) => n1 - n2);
  let slow = fast = max = 0;
  while(fast < nums.length) {
    if(nums[fast] - nums[slow] === 1) {
      max = Math.max(max, fast - slow + 1);
      fast++;
    } else {
      if(nums[fast] - nums[slow] > 1) {
        slow++;
      } else {
        fast++;
      }
    }
  }
  return max;
};

执行用时 : 136 ms, 在所有 JavaScript 提交中击败了94.85%的用户

内存消耗 : 39.8 MB, 在所有 JavaScript 提交中击败了81.08%的用户

你可能感兴趣的:(#,leetcode,简单,leetcode)