返回介绍

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

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

594. Longest Harmonious Subsequence

中文文档

Description

We define a harmonious array as an array where the difference between its maximum value and its minimum value is exactly 1.

Given an integer array nums, return _the length of its longest harmonious subsequence among all its possible subsequences_.

A subsequence of array is a sequence that can be derived from the array by deleting some or no elements without changing the order of the remaining elements.

 

Example 1:


Input: nums = [1,3,2,2,5,2,3,7]

Output: 5

Explanation: The longest harmonious subsequence is [3,2,2,2,3].

Example 2:


Input: nums = [1,2,3,4]

Output: 2

Example 3:


Input: nums = [1,1,1,1]

Output: 0

 

Constraints:

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

Solutions

Solution 1

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
}

Solution 2

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 和您的相关数据。
    原文