返回介绍

solution / 0500-0599 / 0594.Longest Harmonious Subsequence / README

发布于 2024-06-17 01:03:36 字数 2909 浏览 0 评论 0 收藏 0

594. 最长和谐子序列

English Version

题目描述

和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 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

 

提示:

  • 1 <= nums.length <= 2 * 104
  • -109 <= nums[i] <= 109

解法

方法一

class Solution:
  def findLHS(self, nums: List[int]) -> int:
    ans = 0
    counter = Counter(nums)
    for num in nums:
      if num + 1 in counter:
        ans = max(ans, counter[num] + counter[num + 1])
    return ans
class Solution {
  public int findLHS(int[] nums) {
    Map<Integer, Integer> counter = new HashMap<>();
    for (int num : nums) {
      counter.put(num, counter.getOrDefault(num, 0) + 1);
    }
    int ans = 0;
    for (int num : nums) {
      if (counter.containsKey(num + 1)) {
        ans = Math.max(ans, counter.get(num) + counter.get(num + 1));
      }
    }
    return ans;
  }
}
class Solution {
public:
  int findLHS(vector<int>& nums) {
    unordered_map<int, int> counter;
    for (int num : nums) {
      ++counter[num];
    }
    int ans = 0;
    for (int num : nums) {
      if (counter.count(num + 1)) {
        ans = max(ans, counter[num] + counter[num + 1]);
      }
    }
    return ans;
  }
};
func findLHS(nums []int) int {
  counter := make(map[int]int)
  for _, num := range nums {
    counter[num]++
  }
  ans := 0
  for _, num := range nums {
    if counter[num+1] > 0 {
      ans = max(ans, counter[num]+counter[num+1])
    }
  }
  return ans
}

方法二

class Solution:
  def findLHS(self, nums: List[int]) -> int:
    counter = Counter(nums)
    return max(
      [counter[num] + counter[num + 1] for num in nums if num + 1 in counter],
      default=0,
    )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文